Springboot结合@DS配置多少数据源

Springboot结合@DS配置多少数据源

一、简单说明

@DS注解用于动态数据源切换,用于指定方法或类使用特定的数据源
@DS注解一般来自MyBatis-Plus中的Dynamic DataSource模块,它允许在方法级别进行数据源切换

需要注意下核心的功能:

方法级别的数据源切换:@DS注解可以直接应用在方法上,使该方法在执行时使用指定的数据源
类级别的数据源切换:@DS注解可以应用在类上,使该类中的所有方法在执行时使用指定的数据源
优先级:方法级别的@DS注解优先于类级别的@DS注解

二、使用案例

1.引入依赖

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

2.配置yml

spring:
  datasource:
    dynamic:
      #设置默认的数据源或者数据源组,默认值即为master(就是不适用@DS注解标注时,走的默认数据源)
      primary: master
      strict: false
      datasource:
        # 主数据源
        master:
          url: jdbc:mysql://192.168.111.79:3306/cgdn_business_center?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
          username: root
          password: root
          initialSize: 5
          minIdle: 5
          maxActive: 20
          maxWait: 60000
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
        # 租户ywzthw数据源
        ywzthw:
          url: jdbc:mysql://192.168.111.79:3306/cgdn_business_center_hw?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
          username: root
          password: root
          initialSize: 5
          minIdle: 5
          maxActive: 20
          maxWait: 60000
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver

3.注意事项

在写代码的时候有两个注意事项:

单机 + 单数据源:@Transactional 注解
单机 + 多数据源:@DSTransactional 注解(新版本支持,旧版本可以使用@Transactional(propagation = Propagation.REQUIRES_NEW))
多机 + 单/多数据源:Seata 分布式事务

4.代码

@Service
@DS("master")  //此处不加注解的话,走默认数据源(默认数据源就是你在yml文件通过primary指定的数据源)
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public class TemperatureAlarmHistServiceImpl implements ITemperatureAlarmHistService {
	@Resource
	private TemperatureAlarmHistMapper temperatureAlarmHistMapper;

    @DS("ywzthw")
	public boolean saveForList(List<TemperatureAlarmHist> temperatureAlarmHistList) {
		return temperatureAlarmHistMapper.saveForList(temperatureAlarmHistList);
	}
    
    @DS("master")  //此处不加注解的话,走当前类指定的数据源
    public BcAssignInfo getFistByCaseId() {
        BcAssignInfo assignInfo = assignInfoList.get(0);
        BcDictUtils.convertDict(assignInfo);
        convertCaseItemName(assignInfo);
        return assignInfo;
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值