1.概述

动态数据源指的时在系统中,系统可以配置多个数据源,并在数据源之间进行切换,JPAAS支持在配置文件中手工配置数据源,也支持通过平台管理数据源,并且这些数据源可以根据微服务进行加载,比如流程模块可以配置一个专有的数据源,其他的微服务可以不做配置。

2. 配置方法

2.1 配置在application.yml 做数据源配置

这种方式一般是是在业务固定的情况下进行配置,如果是随时需要配置数据源,那么这种情况其实不是很合适。

每个微服务需要配置默认的数据源:

defaultDs:
  string:
    url: jdbc:mysql://${redxun.datasource.ip}:${redxun.datasource.port}/jpaas_bpm?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8
    username: ${redxun.datasource.username}
    password: ${redxun.datasource.password}
    driver-class-name: com.mysql.cj.jdbc.Driver
    validationQuery: select 1
    filters: stat
  int:
    initialSize: 5
    minIdle: 5
    maxActive: 10
    maxPoolPreparedStatementPerConnectionSize: 20
  long:
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
  boolean:
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

如果需要配置其他的数据源可以使用如下的方法:
比如我们配置两个自定义数据源:
在配置文件中增加:
customDataSource=demo1,demo2

demo1:
  string:
    url: jdbc:mysql://${redxun.datasource.ip}:${redxun.datasource.port}/jpaas_bpm?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8


demo2:
  string:
    url: jdbc:mysql://${redxun.datasource.ip}:${redxun.datasource.port}/jpaas_bpm?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8

这样就增加了两个数据源。

2.2 通过界面配置数据源

这种方式的工作原理是,表单应用中,用户通过增加数据源,增加数据源后,这个会发布到nacos中,nacos 监听和读取数据源,通过界面配置,我们可以将数据源配置到某个微服务应用。

  1. 当微服务启动时系统会读取配置的数据源,并自动构建数据源。
  2. 当nacos的配置发生变化时,程序会获取数据源的配置,主动的在系统中配置数据源。

配置方法如下:

2.3 监控数据源

在数据源配置后,我们可以通过监控程序来对druid 数据源进行监控。
访问路径如下:
http://localhost/api/api-form/druid/index.html
账号和密码查看nacos配置:

druid.account=admin
druid.password=admin

2.4 在程序中使用数据源

com.redxun.datasource.DataSourceContextHolder;

DataSourceContextHolder.setDataSource("数据源别名");

//调用完成后清除当前数据源。
DataSourceContextHolder.clearDataSource();

2.5 数据源参数说明

int:
    initialSize: ${bpm.datasource.minSize}
    minIdle: ${bpm.datasource.minSize}
    maxActive: ${bpm.datasource.maxSize}
    maxPoolPreparedStatementPerConnectionSize: 20
  long:
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
  boolean:
    testWhileIdle: true
    testOnBorrow: ${bpm.datasource.testOnBorrow}
    testOnReturn: false
    poolPreparedStatements: true
参数 参数值
initialSize 数据连接池初始大小
minIdle 数据连接最小连接池数
maxActive 数据连接池最大的数量
testOnBorrow 在获取连接时对数据库连接池进行验证

3. 工作原理图

文档更新时间: 2021-10-24 21:50   作者:zyg