配置信息:
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注解。