微服务项目虽然每个服务可以单独使用一个库,但是某些特定服务,如调度中心服务,定时任务等,如果还是使用rpc或者fegin频繁进行远程调用,总感觉不是很合适
所以对单服务进行了多数据源处理
使用的是苞米豆的 dynamic-datasource-spring-boot-starter
<!-- dynamic 多数据源--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.0.0</version></dependency>
整体架构是 mybatisplus+druid+dynamic+xxl-job
其实集成比较简单,不需要关系entity对应哪个库,自动识别的
配置文件如下
server:port: 18871spring:application:name: cloud-scheduledatasource:druid:stat-view-servlet:enabled: truedynamic:primary: dmsPro #设置默认的数据源或者数据源组,默认值即为master# 配置全局druid参数,请按需配置druid:initial-size: 10max-active: 100min-idle: 5max-wait: 6000validation-query: 'select 1'pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 100#dynamic开始多数据源配置datasource:dmsPro:username: xxxpassword: xxxurl: xxxdriver-class-name: xxxdmsDev:username: xxxpassword: xxxurl: xxxdriver-class-name: xxxekp2Dev:username: xxxpassword: xxxurl: xxxdriver-class-name: xxx
management:endpoints:web:exposure:include: '*'xxl:job:admin:addresses: http://xxx/xxl-job-adminaccessToken:executor:appname: xxl-job-executor-Sap2Biaddress:ip:port: -1logpath: /data/applogs/xxl-job/jobhandlerlogretentiondays: 30#mybatis-plus
mybatis-plus:configuration:cache-enabled: falsemap-underscore-to-camel-case: trueglobal-config:id-type: 0field-strategy: 0db-column-underline: truerefresh-mapper: truetypeAliasesPackage: com.xx.xx.executor.core.bean.entitymapper-locations: classpath:com/xx/xx/*/mapper/*.xmllogging:level:com.baomidou: debug
如配置文件,目前有3个库 dmsPro dmsDev ekp2Dev
主库为dmsPro
多数据源处理代码:
1.druid去除默认配置
2.@DS注解使用
@DS注解标识会默认走标识的从库
未配置会走默认dmsPro主库
@DS可以标识在类和方法上,方法优先于类