最近工作中遇到多数据源问题,简单记录一下,并未实际配置一遍。(开发前开发经理已经配置好了,菜鸟我只负责增删改查)
- java
- springboot
pom.xml文件中引入 dynamic-datasource-spring-boot-starter 依赖
step2 配置数据源com.baomidou dynamic-datasource-spring-boot-starter ${version}
yml文件,一定要注意添加空格
以下配置了一个默认库master,一个组group下有两个子库group_1,group_2,一个GBase库g_base
spring: autoconfigure: # 多数据源必须增加此配置,排除原生 Druid 的快速配置类 exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure datasource: dynamic: druid: proxy-filters: - sqlLogInterceptor # 设置默认数据源为master primary: master # 设置严格模式,未匹配到数据源时,是否启动默认数据源 strict: true datasource: # mysql数据源 master: url: jdbc:mysql://127.0.0.1:3306/factory username: root password: 123456 # sqlServer数据源 group_1: url: jdbc:jtds:sqlserver://127.0.0.1:3306/factory username: root password: 123456 group_2: url: jdbc:jtds:sqlserver://127.0.0.1:3306/factory username: root password: 123456 # GBase数据源 g_base: type: com.gbase.jdbc.jdbc2.optional.GBaseDataSource driver-class-name: com.gbase.jdbc.Driver url: jdbc:gbase://127.0.0.1:3306/factory username: root password: 123456step3 使用@DS切换数据源
使用@DS注解切换数据源
@DS(“数据源名称”) 可以为组名,也可以为某个具体库的名
@DS可以注解在方法上或类上,同时存在则采取就近原则,方法上注解优于类上注解
注:开发过程中遇到一些问题,注解到方法上没生效,原因未知
@Service @DS("g_base") public class FactoryServiceImpl implements FactoryServiceImpl { @Autowired private UserService userService; public String saveInfo (String faultDate) { …… } }step4 集成Druid
- 方法一(推荐)
在 yml 文件中配置 spring.autoconfigure.exclude:
spring: autoconfigure: # 多数据源必须增加此配置,排除原生 Druid 的快速配置类 exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
- 方法二(某些springBoot版本可能失效)
1、引入依赖 druid-spring-boot-starter
com.alibaba druid-spring-boot-starter 1.2.1
2、排除原生 Druid 的快速配置类
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class SaleApplication {
public static void main(String[] args) {
SpringApplication.run(FactoryApplication.class, args);
}
}