微服务项目虽然每个服务可以单独使用一个库,但是某些特定服务,如调度中心服务,定时任务等,如果还是使用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: 18871
spring:
application:
name: cloud-schedule
datasource:
druid:
stat-view-servlet:
enabled: true
dynamic:
primary: dmsPro #设置默认的数据源或者数据源组,默认值即为master
# 配置全局druid参数,请按需配置
druid:
initial-size: 10
max-active: 100
min-idle: 5
max-wait: 6000
validation-query: 'select 1'
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 100
#dynamic开始多数据源配置
datasource:
dmsPro:
username: xxx
password: xxx
url: xxx
driver-class-name: xxx
dmsDev:
username: xxx
password: xxx
url: xxx
driver-class-name: xxx
ekp2Dev:
username: xxx
password: xxx
url: xxx
driver-class-name: xxx
management:
endpoints:
web:
exposure:
include: '*'
xxl:
job:
admin:
addresses: http://xxx/xxl-job-admin
accessToken:
executor:
appname: xxl-job-executor-Sap2Bi
address:
ip:
port: -1
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: 30
#mybatis-plus
mybatis-plus:
configuration:
cache-enabled: false
map-underscore-to-camel-case: true
global-config:
id-type: 0
field-strategy: 0
db-column-underline: true
refresh-mapper: true
typeAliasesPackage: com.xx.xx.executor.core.bean.entity
mapper-locations: classpath:com/xx/xx/*/mapper/*.xml
logging:
level:
com.baomidou: debug
如配置文件,目前有3个库 dmsPro dmsDev ekp2Dev
主库为dmsPro
多数据源处理代码:
1.druid去除默认配置
2.@DS注解使用
@DS注解标识会默认走标识的从库
未配置会走默认dmsPro主库
@DS可以标识在类和方法上,方法优先于类