多数据源配置
java 多数据源配置
·
切换数据源 @DS(“数据源名称”)
最近工作中遇到多数据源问题,简单记录一下,并未实际配置一遍。(开发前开发经理已经配置好了,菜鸟我只负责增删改查)
- java
- springboot
实现多数据源访问的过程
step1 引入依赖
pom.xml文件中引入 dynamic-datasource-spring-boot-starter 依赖
<!--多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
step2 配置数据源
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: 123456
step3 使用@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
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.1</version>
</dependency>
2、排除原生 Druid 的快速配置类
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class SaleApplication {
public static void main(String[] args) {
SpringApplication.run(FactoryApplication.class, args);
}
}
更多推荐
已为社区贡献3条内容
所有评论(0)