Springboot Mybatis 多数据源利用注解动态切换数据库

该博客介绍了如何在Spring Boot中实现数据源的动态切换,包括自定义数据源选择注解、配置多个数据源、动态数据源管理器、切面进行数据源切换以及在启动类中排除自动配置。同时,文章还提到了Druid数据源的监控问题,如日志报错的解决方案以及如何开启Druid监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.自定义数据源选择注解

2.DataSources 数据源名称

3.Mybatis配置

4.加载配置文件数据源

5.数据源管理器

6.程序运行时动态切换数据源的方法

7.利用切面确定数据源,并切换

8.在启动类加上排除自动配置的注解

9.切换数据源的注解加载实现类的方法上,如果是用主库就不用了加了

10.这里就差不多了,再提两个小问题


1.自定义数据源选择注解

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DataSource {
    String name() default DataSources.MASTER_DB;
}

2.DataSources 数据源名称

public interface DataSources  {
    String MASTER_DB = "master";

    String SLAVE_DB = "slave";
}

3.Mybatis配置

@Configuration
public class MybatisConfig {

    @Resource
    @Qualifier(DataSources.MASTER_DB)
    private DataSource masterDB;

    @Resource
    @Qualifier(DataSources.SLAVE_DB)
    private DataSource slaveDB;

    /**
     * 动态数据源
     */
    @Bean(name = "dynamicDataSource")
    public DataSource dynamicDataSource() {
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        // 默认数据源
        dynamicDataSource.setDefaultTargetDataSource(masterDB);
        // 配置多数据源
        Map<Object, Object> dsMap = new HashMap<>(4);
        dsMap.put(DataSources.MASTER_DB, masterDB);
        dsMap.put(DataSources.SLAVE_DB, slaveDB);
        dynamicDataSource.setTargetDataSources(dsMap);
        return dynamicDataSource;
    }

    @Bean
    @ConfigurationProperties(prefix = "mybatis")
    public SqlSessionFactoryBean sqlSessionFactoryBean() {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 配置数据源,此处配置为关键配置,如果没有将 dynamicDataSource 作为数据源则不能实现切换
        sqlSessionFactoryBean.setDataSource(dynamicDataSource());
        return sqlSessionFactoryBean;
    }
}

4.加载配置文件数据源

@Configuration
public class DatasourceConfig {
    @Bean(name = DataSources.MASTER_DB)
    @ConfigurationProperties(prefix = "spring.datasource.druid.master")
    @Primary
    public DataSource
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@insist123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值