配置信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
   | spring:   autoconfigure:     #自动化配置 例外处理     exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure   datasource:     type: com.alibaba.druid.pool.DruidDataSource     druid:       stat-view-servlet:         enabled: true         loginUsername: admin         loginPassword: 123456
      #多数据源配置     dynamic:       druid: #以下是全局默认值,可以全局更改         #监控统计拦截的filters         filters: stat         #配置初始化大小/最小/最大         initial-size: 1         min-idle: 1         max-active: 20         #获取连接等待超时时间         max-wait: 60000         #间隔多久进行一次检测,检测需要关闭的空闲连接         time-between-eviction-runs-millis: 60000         #一个连接在池中最小生存的时间         min-evictable-idle-time-millis: 300000         validation-query: SELECT 'x'         test-while-idle: true         test-on-borrow: false         test-on-return: false         #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false         pool-prepared-statements: false         max-pool-prepared-statement-per-connection-size: 20         stat:           merge-sql: true           log-slow-sql: true           slow-sql-millis: 3000
        primary: master       strict: false
        datasource:         # 数据库1         master:           driver-class-name: com.mysql.cj.jdbc.Driver           url: jdbc:mysql://localhost:3306/test1?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true           username: root           password: 123456         # 数据库2         biz:           driver-class-name: com.mysql.cj.jdbc.Driver           url: jdbc:mysql://localhost:3306/test2?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true           username: root           password: 123456
   | 
 
注意事项:
primary: master配置后,全局默认master主数据源,只要没有@DS注解显式申明切换数据源,默认就是master主数据源。 
- 在同一个事务中,数据源不能切换。
 
- @DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
 
- 官方强烈建议只在service的类和方法上添加注解,不建议在mapper上添加注解。
 
解决事务内不能切换数据源:
可以在被调用方方法或者类上创建一个新事务:
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
注意如果调用方与被调用方在同一个Service类中,propagation = Propagation.REQUIRES_NEW会被忽略掉,调用时不会再创建新事务。
mybaits plus的service1实现类注解@DS切换数据源后,其他类service2中调用service1.getBaseMapper或者直接@Autowired装载service1的mapper使用其mapper方法时数据源不会切换,除非直接在mapper层注解@DS切换数据源,不过官方不建议在mapper上添加@DS注解。