双数据源 - 方式一

2020-11-28  本文已影响0人  狂暴踩踩

个人博客地址
注解+aop

先把个人的结论写前面

第一种方式: aop+注解

流程效果 : 调用repository层方法前;通过切面切换数据源; 直接撸代码

step1 增加注解:

因为一个repository类不应该同时对应两个数据库; 应该注解指定定义类使用即可

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.TYPE})
public @interface DataSourceType {

    DBTypeEnum value() default DBTypeEnum.PRIMARY;
}

同时定义下两种不同数据源的枚举

@Getter
public enum DBTypeEnum {
    PRIMARY("primaryDb"),
    LOG("logDb"),;
    private String dbName;
    DBTypeEnum(String dbName) {
        this.dbName = dbName;
    }
}

step2 动态数据源

spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/sharding_0?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=UTC
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.log.url=jdbc:mysql://127.0.0.1:3306/sharding_1?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=UTC
spring.datasource.log.username=root
spring.datasource.log.password=root
spring.datasource.log.driver-class-name=com.mysql.cj.jdbc.Driver

使用时

在mapper类上加入指定的注解

上一篇下一篇

猜你喜欢

热点阅读