dynamic 在一个方法中使用俩个或多个数据源

        在日常开发中,我们经常有在一个方法中使用俩种以上的数据源,针对这种需求,我们可以使用dynamic的手动切换数据源来实现。

一.引入依赖
           <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.1</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                <version>3.5.0</version>
            </dependency>

二.配置yml


spring:
  datasource:
    dynamic:
      #设置默认的数据源或者数据源组,默认值即为datasource1
      primary: ds1
      #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      strict: false
      datasource:
        ds1:
          url: jdbc:mysql://127.0.0.1:3306/db1?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8&useSSL=false
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
        ds2:
          url: jdbc:mysql://127.0.0.1:3306/db2?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8&useSSL=false
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver

三.手动切数据源

@Service
@DS("db1")
public class TestService {
    public  void test(){
        //因为service上默认是db1,所以着里面的代码会走db1
        try {
            //手动开启db2数据源
            DynamicDataSourceContextHolder.push("db2");
            //todo 具体业务逻辑
        } finally {
            //使用完必须手动关闭,不然下面都会使用db2
            DynamicDataSourceContextHolder.poll();
        }
    }
}

同样,多个数据源也一样

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
dynamic-datasource-spring-boot-starter是一个Spring Boot插件,可以帮助你在应用程序轻松配置和使用多个数据源使用该插件,你只需要在配置文件定义多个数据源,然后在代码使用注解来指定要使用数据源。 下面是使用dynamic-datasource-spring-boot-starter的步骤: 1. 引入依赖 在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.1</version> </dependency> ``` 2. 配置数据源 在application.yml或application.properties配置文件配置多个数据源。例如: ```yaml spring: datasource: datasource1: url: jdbc:mysql://localhost:3306/db1 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver datasource2: url: jdbc:mysql://localhost:3306/db2 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver ``` 3. 配置动态数据源 在代码配置动态数据源。例如: ```java @Configuration public class DataSourceConfig { @Primary @Bean @ConfigurationProperties(prefix = "spring.datasource.datasource1") public DataSource datasource1() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.datasource2") public DataSource datasource2() { return DataSourceBuilder.create().build(); } @Bean public DynamicDataSource dynamicDataSource() { Map<Object, Object> dataSourceMap = new HashMap<>(); dataSourceMap.put("datasource1", datasource1()); dataSourceMap.put("datasource2", datasource2()); DynamicDataSource dynamicDataSource = new DynamicDataSource(); dynamicDataSource.setTargetDataSources(dataSourceMap); dynamicDataSource.setDefaultTargetDataSource(datasource1()); return dynamicDataSource; } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dynamicDataSource()); return sqlSessionFactoryBean.getObject(); } } ``` 在上面的例子,我们通过配置两个DataSource对象,然后将它们放入一个Map,并将这个Map注入到DynamicDataSource对象DynamicDataSource对象通过调用setTargetDataSources()方法来设置所有可用的数据源,并通过调用setDefaultTargetDataSource()方法来设置默认数据源。 4. 使用动态数据源 在代码使用动态数据源。例如: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @DataSource("datasource2") public List<User> listUsers() { return userMapper.listUsers(); } } ``` 在上面的例子,我们使用了@DataSource注解来指定要使用数据源,这里我们指定使用datasource2数据源。 这就是使用dynamic-datasource-spring-boot-starter插件在Spring Boot应用程序配置和使用多个数据源的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金鑫9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值