springboot+mybatis-plus配置多数据源(无废话)

springboot+mybatis-plus配置多数据源(无废话),第1张

目录
  • 1. 准备依赖
  • 2. 启动类注解加参数
  • 3. 配置文件配置多数据源
  • 4. 在serviceImpl使用@DS
  • 5. 注意事项

1. 准备依赖

此处只展示了多数据源需要的依赖,基本的mybatisplus依赖不再展示

<dependency>
   <groupId>com.baomidougroupId>
   <artifactId>dynamic-datasource-spring-boot-starterartifactId>
   <version>2.5.6version>
dependency>
2. 启动类注解加参数

此处易忽略,勿忘

@SpringBootApplication加参数exclude = {DruidDataSourceAutoConfigure.class}

// 第一行是需要加的,其他无必要不需要加(为方便理解才复制整个启动类)
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
@MapperScan({"com.xingye.outerapi.**.mapper"})
@EnableSwagger2Doc
@EnableTransactionManagement
@EnableConvertScan(basePackages = "com.xingye.outerapi")
@EnableFeignClients
public class OuterapiApplication {
    public static void main(String[] args) {
        SpringApplication.run(OuterapiApplication.class,args);
    }
}
3. 配置文件配置多数据源

提醒一下,如果用yml的话一定注意空格缩进

spring:
  # 数据库配置
  datasource:
    # 此处的一般写默认库的信息
    url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/test1?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: xxxxxxxxx
    password: xxxxxxxxxxx
    # 从这里开始是对多数据源的配置
    dynamic:
      primary: test1 # 设置默认的数据源或者数据源组,默认值即为test1
      strict: false # 严格匹配数据源,默认false(true未匹配到指定数据源时抛异常,false使用默认数据源)
      datasource:
        # 配置第1个数据库为test1
        test1:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jjdbc:mysql://xxx.xxx.xxx.xxx:3306/test1?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
          username: xxxxxxxxx
          password: xxxxxxxxxxx
        # 配置第2个数据库为test2
        test2:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/test2?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
          username: xxxxxxxxx
          password: xxxxxxxxxxx
4. 在serviceImpl使用@DS
注解结果
没有@DS默认数据源
@DS(“dsName”)dsName可以为组名也可以为具体某个库的名称
  1. 在类上加,所有方法都会使用注解指定的数据源
@DS("test2")
@Service
public class TestServiceImpl implements TestService {
    @Autowired
    private TestMapper testMapper;

    @Override
    public List<String> test1(String num) {
		........
    }

    @Override
    public List<String> test2(String num) {
		........
    }
}
  1. 在方法上加,各自方法使用各自注解指定的数据源

@Service
public class TestServiceImpl implements TestService {
    @Autowired
    private TestMapper testMapper;
    
    @DS("test1")
    @Override
    public List<String> test1(String num) {
		........
    }
    
    @DS("test2")
    @Override
    public List<String> test2(String num) {
		........
    }
}
5. 注意事项
  • 不能使用事务,否则数据源不会切换,使用的还是第一次加载的数据源
  • 第一次加载数据源之后,第二次、第三次… *** 作其它数据源,如果数据源不存在,使用的还是第一次加载的数据源
  • 数据源名称不要包含下划线,否则不能切换

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/727568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存