@DS注解实现动态数据源切换

@DS注解实现动态数据源切换

@DS注解可以作用于方法、类上。
当注解添加到类上,意味着此类里的方法都使用此数据源;
当注解添加到方法上时,意味着此方法上使用的数据源优先级高于其他一切配置;

  1. pom文件引包
		<!-- 动态数据源切换 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
  1. 配置文件配置多个数据源
##设置默认的数据源或者数据源组,默认值即为master
spring.datasource.dynamic.primary=master
#设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
spring.datasource.dynamic.strict=false
# postgresql 配置  主库的配置
spring.datasource.dynamic.datasource.master.url = jdbc:postgresql://localhost:5432/zhejiang_data_repository
spring.datasource.dynamic.datasource.master.username=root
spring.datasource.dynamic.datasource.master.password=root
spring.datasource.dynamic.datasource.master.driver-class-name=org.postgresql.Driver
#从库的配置
spring.datasource.dynamic.datasource.slave.url = jdbc:postgresql://localhost:5432/server_test_logdb
spring.datasource.dynamic.datasource.slave.username=postgres
spring.datasource.dynamic.datasource.slave.password=123456
spring.datasource.dynamic.datasource.slave.driver-class-name=org.postgresql.Driver
  1. 配置@DS注解
    1、作用类上,说明这个类都使用从库数据源
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.southsmart.repository.model.dto.DataCount;
import com.southsmart.repository.model.po.ServiceAccessLog;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;
import java.util.List;

/**
 * mapper层   
 * @DS("slave")说明这个mapper用的从库的数据源配置,如果不加@DS注解就是用默认的主库数据源配置
 * @author yjj
 * @version 1.0
 * @since 2022 -09-14 11:40:54
 */
@Mapper
@DS("slave")
public interface ServiceAccessLogMapper extends BaseMapper<ServiceAccessLog> {

}

2、作用单独方法上
执行此方法时使用的就是从库数据源配置

@DS("slave")
public void selectPage(){

}
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,可以使用注解`@Primary`和`@Qualifier`来控制使用哪个数据源,例如: ```java @Service public class MyService { @Autowired @Qualifier("ds1") private DataSource dataSource1; @Autowired @Qualifier("ds2") private DataSource dataSource2; @Transactional(value="txMgr1") public void doSomethingWithDs1() { // use dataSource1 to interact with datasource1 database // ... } @Transactional(value="txMgr2") public void doSomethingWithDs2() { // use dataSource2 to interact with datasource2 database // ... } } ``` 在上面的示例代码中,`@Qualifier("ds1")`和`@Qualifier("ds2")`注解指定了要使用哪个具体的数据源。而`@Transactional`注解中的`value="txMgr1"`和`value="txMgr2"`指定了要使用哪个事务管理器来管理对应的数据源。 然后,在配置文件中可以分别配置两个数据源和对应的事务管理器: ```yaml # 数据源1配置 spring: datasource: ds1: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds1 username: root password: root # 数据源2配置 spring: datasource: ds2: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds2 username: root password: root # 事务管理器1配置 spring: transaction: manage-name: txMgr1: datasources: - # 对应的数据源1,必须与上面配置的一致 name: dataSource1 dataSource: ds1 # 事务管理器2配置 spring: transaction: manage-name: txMgr2: datasources: - # 对应的数据源2,必须与上面配置的一致 name: dataSource2 dataSource: ds2 ``` 以上配置完成后,就可以在`MyService`类的方法中根据需要使用不同的数据源了。同时,在事务管理器的配置中也必须指定对应的数据源

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值