mysql数据原配置

mysql数据原配置

mop文件
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.0.1</version>
</dependency>
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.0.5</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
单数据源配置
  1. yml文件

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver 
        jdbc-url: jdbc:mysql://127.0.0.1/t_student?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
        port: 3306
        username: root
        password: root
    
    1. javaBean配置
    @Configuration
    public class DataSourceConfig {
    
    	@Bean
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource createMaster() {
            return DataSourceBuilder.create().build();
        }
        
        @Bean
        public PaginationInterceptor paginationInterceptor() {
    		//MybatisPlus分页配置加载
            PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
            return paginationInterceptor;
        }
    
    }
    
多数据源
  1. yml文件

    spring:
      datasource:
        master:
          name: master
          driver-class-name: com.mysql.cj.jdbc.Driver
          jdbc-url: jdbc:mysql://127.0.0.1/t_table?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
          port: 3306
          username: root
          password: root
        slave:
          name: slave
          driver-class-name: com.mysql.cj.jdbc.Driver
          jdbc-url: jdbc:mysql://ip/dev_bailun_storm_data?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
          port: 3306
          username: root
          password: root
    
    1. javaBean配置
    /**
     *	创建数据源bean
     */
    @Configuration
    public class DataSourceConfig {
        private static final Logger log = LoggerFactory.getLogger(DataSourceConfig.class);
    
        public DataSourceConfig() {
        }
    
        @Bean({"master"})
        @ConfigurationProperties(
            prefix = "spring.datasource.master"
        )
        public DataSource createMaster() {
            log.info("【开始初始主库】");
            return DataSourceBuilder.create().build();
        }
    
        @Bean({"slave"})
        @ConfigurationProperties(
            prefix = "spring.datasource.slave"
        )
        public DataSource createSlave() {
            log.info("【开始初始从库】");
            return DataSourceBuilder.create().build();
        }
    }
    /**
     * 枚举类型,区分主从库
     */
    public enum DataSourceType {
        master,
        slave;
    
        private DataSourceType() {
        }
    }
    
    /**
     * 创建本地线程,初始化使用master
     */
    public class DataSourceContextHolder {
        private static final ThreadLocal<Object> CONTEXT_HOLDER = ThreadLocal.withInitial(() -> {
            return DataSourceType.master;
        });
    
        public DataSourceContextHolder() {
        }
    
        public static void setDataSourceKey(Object key) {
            CONTEXT_HOLDER.set(key);
        }
    
        public static Object getDataSourceKey() {
            return CONTEXT_HOLDER.get();
        }
    
        public static void clearDataSourceKey() {
            CONTEXT_HOLDER.remove();
        }
    }
    
    /**
     * 配置动态数据源切换
     */
    @Component
    @Primary
    public class RoutingDataSource extends AbstractRoutingDataSource {
        private static final Logger log = LoggerFactory.getLogger(RoutingDataSource.class);
        @Autowired
        @Qualifier("master")
        private DataSource master;
        @Autowired
        @Qualifier("slave")
        private DataSource slave;
    
        public RoutingDataSource() {
        }
    	//决定使用哪个数据源
        protected Object determineCurrentLookupKey() {
            return DataSourceContextHolder.getDataSourceKey();
        }
    
        //将映射配置到多数据源中
        public void afterPropertiesSet() {
            Map<Object, Object> map = new HashMap();
            map.put(DataSourceType.master, this.master);
            map.put(DataSourceType.slave, this.slave);
            this.setTargetDataSources(map);
            this.setDefaultTargetDataSource(this.master);
            super.afterPropertiesSet();
        }
    }
    
    @Aspect
    @Component
    @Order(0)
    public class DataSourceAspect {
        private static final Logger log = LoggerFactory.getLogger(DataSourceAspect.class);
        //这里以select区分使用的数据源
        private final String QUERY_PREFIX = "select";
    
        public DataSourceAspect() {
        }
    	
        //拦截方法,在方法之前执行;将数据源设置到本地线程中
        @Before("execution( * com.fzz.club.*.mapper.*(..))")
        public void process(JoinPoint point) {
            Boolean isQueryMethod = this.isSelectMethod(point.getSignature().getName());
            if (isQueryMethod) {
                DataSourceContextHolder.setDataSourceKey(DataSourceType.slave);
            } else {
                DataSourceContextHolder.setDataSourceKey(DataSourceType.master);
            }
    
        }
    
        private Boolean isSelectMethod(String methodName) {
            return methodName.startsWith("select") ? true : false;
        }
    }
    
    
主启动类
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan(basePackages = "com.bailun.storm.data.mapper")
public class BailunStormDataServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(BailunStormDataServiceApplication.class, args);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值