思路:
1、引入依赖
2、修改Application.yml,配置多个数据源信息
3、使用@DS切换数据源
-
com.baomidou -
dynamic-datasource-spring-boot-starter -
3.2.1
- spring:
- # 数据源配置项
- autoconfigure:
- exclude:
- - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
- datasource:
- druid: # Druid 【监控】相关的全局配置
- web-stat-filter:
- enabled: true
- stat-view-servlet:
- enabled: true
- allow: # 设置白名单,不填则允许所有访问
- url-pattern: /druid/*
- login-username: # 控制台管理用户名和密码
- login-password:
- filter:
- stat:
- enabled: true
- log-slow-sql: true # 慢 SQL 记录
- slow-sql-millis: 100
- merge-sql: true
- wall:
- config:
- multi-statement-allow: true
- dynamic: # 多数据源配置
- druid: # Druid 【连接池】相关的全局配置
- initial-size: 5 # 初始连接数
- min-idle: 10 # 最小连接池数量
- max-active: 20 # 最大连接池数量
- max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
- time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
- min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
- max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
- # validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
- test-while-idle: true
- test-on-borrow: false
- test-on-return: false
- # 设置默认的数据源或者数据源组,默认值即为master
- primary: master
- datasource:
- # 主数据源
- master:
- name: lc_mono_camas
- url: jdbc:mysql://10.1.102.24:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
- driver-class-name: com.mysql.jdbc.Driver
- username: lc_mono_camas
- password: Lc_mono_camas@_1706
- cmds_finger:
- name: cmds_finger
- # url: jdbc:sqlite:lib/tidefinger/cms_finger.db?date_string_format=yyyy-MM-dd HH:mm:ss
- url: jdbc:sqlite:D:/lcProject/lc-mono-camas-java/lc-camas/lib/cms_finger.db?date_string_format=yyyy-MM-dd HH:mm:ss
- driver-class-name: org.sqlite.JDBC
- username:
- password:
- @DS("cmds_finger")
- public List
selectAll(JSONObject reqJson) { - return tideTideMapper.selectAll(reqJson);
- }
@DS可以注解在方法上、类上、接口、枚举,同时存在就近原则 方法上注解优先于类上注解。
常见问题:涉及需要切换数据源时,
1.不能使用事务,否则数据源不会切换,使用的还是是第一次加载的数据源 。
删除操作多数据源的方法或者类、接口上的注解 @Transactional() 即可。
2.第一次加载的数据源之后,第二次(第三次...)操作其它数据源,如果数据源不存在,使用的还是第一次加载的数据源
3.数据源名称最好不要包含下滑线,下滑线的数据源切换不了