Springboot Dynamic Datasource

Dynamic-Datasource

pom.xml中导入依赖

0
1
2
3
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</dependency>

application.yml中配置动态数据源

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
spring:
  datasource:
    dynamic:
      # 设置默认的数据源或者数据源组,默认值即为main
      primary: main
      # 严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      strict: false
      datasource:
        # 默认数据源
        main: 
          url: url
          username: username
          password: passward
          driver-class-name: xxx.Dirver
        # 其他数据源
        slave_1:
          url: url
          username: username
          password: passward
          driver-class-name: xxx.Dirver

Service方法上使用@DS注解

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
public interface DemoService {
    void testDynamicFunc();
}

@Service
public class DemoServiceImpl implements DemoService {
    @Override
    @DS("main")
    @Transactional(rollbackFor = Exception.class, isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRES_NEW)
    void testDynamicFunc() {
        demoDao.batchInsertOrUpdate(List<Object> record);
    }
}

PS:在使用@DS注解时,需要注意以下两点

  • 在同一个Service类中,使用多个@DS注解配置不同的数据源,可能会失效,解决办法是不同数据源拆分成不同的Service类。
  • 在同一个事务中,使用多个@DS注解配置不同的数据源,可能会失效,解决办法是将事务的传播方式修改为propagation = Propagation.REQUIRES_NEW
Licensed under CC BY-NC-SA 4.0
最后更新于 Apr 05 2023 19:48 CST
赞助
Sponsor WeChat Pay
Sponsor Ali Pay
Powered by HugoStack