SpringBoot集成Druid连接多个数据源

在实际项目中,一个微服务需要与多个不同的数据库进行交互。使用 Druid 作为连接池,有助于提高数据源的性能和可靠性。通过这种方式,微服务可以在数据库或数据集群之间保持高效的交互,实现更复杂的业务逻辑。

1. 引入依赖

xml 复制代码
<!--   多数据源连接池     -->
 <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.1.21</version>
 </dependency>

2. 连接配置

java 复制代码
spring:
  datasource:
    test1:
      jdbc-url: jdbc:mysql://localhost:3306/demo?setUnicode=true&characterEncoding=utf8&useSSL=false&autoReconnect=true
      driver-class-name: com.mysql.jdbc.Driver
      username: root
      password: 123456
      initialSize: 10
      minIdle: 30
      maxActive: 30
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000

3. 多数据源配置类

getResources("classpath:mapper/test1/*.xml") 中数据源test1会自动扫描test1文件夹下面的所有mapper.xml文件

java 复制代码
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = {"cn.cjc.mapper.test1"}, sqlSessionFactoryRef = "test1SqlSessionFactory")
public class Test1DataSourceConfig {

    @Value("${spring.datasource.test1.jdbc-url}")
    private String url;
    @Value("${spring.datasource.test1.driver-class-name}")
    private String driverClassName;
    @Value("${spring.datasource.test1.username}")
    private String username;
    @Value("${spring.datasource.test1.password}")
    private String password;
    @Value("${spring.datasource.test1.initialSize}")
    private int initialSize;
    @Value("${spring.datasource.test1.minIdle}")
    private int minIdle;
    @Value("${spring.datasource.test1.maxActive}")
    private int maxActive;
    @Value("${spring.datasource.test1.maxWait}")
    private int maxWait;
    @Value("${spring.datasource.test1.timeBetweenEvictionRunsMillis}")
    private int timeBetweenEvictionRunsMillis;
    @Value("${spring.datasource.test1.minEvictableIdleTimeMillis}")
    private int minEvictableIdleTimeMillis;

    @Bean(name = "test1DataSource")
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setInitialSize(initialSize);
        dataSource.setMinIdle(minIdle);
        dataSource.setMaxActive(maxActive);
        dataSource.setMaxWait(maxWait);
        dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        dataSource.setValidationQuery("select 1");
        dataSource.setTestWhileIdle(true);
        return dataSource;
    }

    @Bean(name = "test1SqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/test1/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "test1TransactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "test1SqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
相关推荐
拽着尾巴的鱼儿2 小时前
fixedBug:Web Requeset Get请求URLEncoder 编码
java
lkbhua莱克瓦242 小时前
Apache Maven全面解析
java·数据库·笔记·maven·apache
爱编码的傅同学2 小时前
【线程的同步与互斥】初识互斥量与锁
android·java·开发语言
hssfscv2 小时前
Javaweb学习笔记——后端实战6登录功能1
笔记·后端·学习
ChoSeitaku2 小时前
28.C++进阶:map和set封装|insert|迭代器|[]
java·c++·算法
2501_944526422 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 收藏功能实现
android·java·开发语言·javascript·python·flutter·游戏
C++实习生2 小时前
Visual Studio 2017 Enterprise 组件目录
后端·python·flask
2501_944526422 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 个人中心实现
android·java·javascript·python·flutter·游戏
u0104058362 小时前
企业微信审批事件回调的安全验证与Java HMAC-SHA256校验实现
java·安全·企业微信