SpringBoot mybatis基于注解的方式实现多数据源配置

当项目需要使用到两个或多个数据源时,就需要采用多数据源配置了

第一步 修改配置文件

spring:
  datasource:
    dbcp1: #第一个数据源
      driver_class_name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3306/shop
      username: root
      password: root
      dialect: mysql
    dbcp2: #第二个数据源
      driver_class_name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3306/shorp1
      username: root
      password: root
      dialect: mysql
    dbcp3: #第三个数据源
      driver_class_name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3306/shop2
      username: root
      password: root
      dialect: mysql
    druid: #druid配置
    # 连接池的配置信息
    # 初始化大小,最小,最大
    initial-size: 5
    min-idle: 5
    maxActive: 20
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000

配置了三个数据源 建议从两个开始(虽然三个也没差别)

第二步:实现基于注解数据源动态切换

DataSourceConfig负责加载配置文件中数据源的配置信息

package com.shop.config;

import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
//@RefreshScope
public class DataSourceConfig {
   

    //数据源1
    @Bean(name = "dbcp1")
    @ConfigurationProperties(prefix = "spring.datasource.dbcp1") // application.properteis中对应属性的前缀
    public DataSource dataSource1() {
   
        return DataSourceBuilder.create().build();
    }

    //数据源2
    @Bean(name = "dbcp2")
    @ConfigurationProperties(prefix = "spring.datasource.dbcp2") // application.properteis中对应属性的前缀
    public DataSource dataSource2() {
   
        return DataSourceBuilder.create().build();
    }

    //数据源2
    @Bean(name = "dbcp3")
    @ConfigurationProperties(prefix = "spring.datasource.dbcp3") // application.properteis中对应属性的前缀
    public DataSource dataSource3() {
   
        return DataSourceBuilder.create().build();
    }

    /**
     * 动态数据源: 通过AOP在不同数据源之间动态切换
     * @return
     */
    @Primary
    @Bean(name = "dynamicDataSource")
    public DataSource dynamicDataSource() {
   
        DynamicDS dynamicDS = new DynamicDS();
        // 默认数据源
//        dynamicDataSource.setDefaultTargetDataSource(dataSource1());
        // 配置多数据源
        Map<Object, Object> dsMap = new 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DNYDYS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值