springboot实现连接多个数据源

dynamic datasource

导入依赖

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
        <version>2.5.6</version>
    </dependency>

编写配置文件

spring:
  datasource:
    dynamic:
      primary: ds1 # 设置默认的数据源或者数据源组,默认值即为master,如果你主从默认下主库的名称就是master可不定义此项。
      strict: fasle # 严格匹配数据源,默认fasle,true未匹配到指定数据源的时候抛异常
      datasource:
        ds1:
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://47.xxx.xx.xxx:3306/dynamic?characterEncoding=utf8&useSSL=false
        ds2:
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://47.xxx.xx.xxx:3307/dynamic?characterEncoding=utf8&useSSL=false
       #......省略
       #以上会配置一个默认库ds1,一个组slave下有两个子库ds1,ds2

如何使用

在service层方法上加上 @DS("xxx")注解即可指定数据库

@DS("ds1")
public User getByUserId1(String userId){
  return userDao.getById(Integer.parseInt(userId));
}
@DS("ds2")
public User getByUserId2(String userId){
  return userDao.getById(Integer.parseInt(userId));
}
@DS("ds1")
public void insertUserDs1((String name,String age)){
  userDao.insertUserDs1(name,age);
}
@DS("ds2")
public void insertUserDs2((String name,String age)){
  userDao.insertUserDs2(name,age);
}

如何实现多数据源事务

在方法上加上@DSTransactional注解即可

@DSTransactional
public void insertUserAll(String name,String age){
  UserService userService = (UserService) AopContext.currentProxy();
  userService.insertUserDs1(name,age);
  userService.insertUserDs2(name,age);
}

如果该方法抛出异常则会回滚

posted @   没有烦恼的猫猫  阅读(473)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示