切换数据源 @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);
}
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐