https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter
苞米豆多数据源启动器,欢迎关注。
V2.2.3 的改变:
支持druid参数全局配置。(重要)
对外暴露动态添加删除数据源的方法。(重要,可以启动后增减数据源)
增加在组内数据源为空时使用默认数据源。
去除启动时校验组内只有单个数据源。
演示全局druid参数配置
spring: datasource: druid: stat-view-servlet: loginUsername: admin loginPassword: 123456 dynamic: druid: # 2.2.3开始提供全局druid参数,以下是默认值和druid原生保持一致 initial-size: 0 max-active: 8 min-idle: 2 max-wait: -1 min-evictable-idle-time-millis: 30000 max-evictable-idle-time-millis: 30000 time-between-eviction-runs-millis: 0 validation-query: select 1 validation-query-timeout: -1 test-on-borrow: false test-on-return: false test-while-idle: true pool-prepared-statements: true max-open-prepared-statements: 100 filters: stat,wall share-prepared-statements: true datasource: master: username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://47.100.20.186:3306/dynamic?characterEncoding=utf8&useSSL=false druid: # 以下参数针对每个库可以重新设置druid参数 initial-size: max-active: min-idle: max-wait: min-evictable-idle-time-millis: max-evictable-idle-time-millis: time-between-eviction-runs-millis: validation-query: select 1 FROM DUAL #比如oracle就需要重新设置这个 validation-query-timeout: test-on-borrow: test-on-return: test-while-idle: pool-prepared-statements: max-open-prepared-statements: filters: share-prepared-statements:
多个库的事物如何处理?
不能 不能 不能,一个业务操作涉及多个库不要加事物。
是否支持JPA?
不完全支持,受限于JPA底层,你只能在一个controller下切换第一个库,第二个库不能切换。(如有解决办法请联系作者)
如何实现动态增加或删除数据源?
需要自己实现,从2.2.3开始DynamicRoutingDataSource核心数据源类对外暴露了 addDataSource
removeDataSource
方法。
你可以在需要的地方@Autowired DynamicRoutingDataSource 调用相关方法增减数据源。
如何解析自己的数据源?
默认的数据源是通过配置文件 DataSourceFactory
工厂类解析,因需要兼容springboot 1.x 和2.x做了很多适配。
如果你不需要使用druid可以直接使用springboot原生 DataSourceBuilder
来构建一个新的DataSource。
如何在启动的时候就用外部配置而不是默认的yml配置?
实现 DynamicDataSourceProvider
可参考 AbstractJdbcDataSourceProvider
从JDBC实现(未真正实现,不可用于生产)。
各位已有的实现欢迎提交PR,例如从数据库,ldap,zookeeper,redis等等。