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);
    }
}
相关推荐
波波0071 天前
ASP.NET MVC 中的返回类型全集详解
后端·asp.net·mvc
菜鸡儿齐1 天前
Unsafe方法学习
java·python·学习
汤姆yu1 天前
IDEA接入Claude Code保姆级教程(Windows专属+衔接前置安装)
java·windows·intellij-idea·openclaw·openclasw安装
prince051 天前
用户积分系统怎么设计
java·大数据·数据库
96771 天前
理解IOC控制反转和spring容器,@Autowired的参数的作用
java·sql·spring
SY_FC1 天前
实现一个父组件引入了子组件,跳转到其他页面,其他页面返回回来重新加载子组件函数
java·前端·javascript
糟糕好吃1 天前
我让 AI 操作网页之后,开始不想点按钮了
前端·javascript·后端
耀耀_很无聊1 天前
09_Jenkins安装JDK环境
java·运维·jenkins
ノBye~1 天前
Centos7.6 Docker安装redis(带密码 + 持久化)
java·redis·docker
黑臂麒麟1 天前
openYuanrong:多语言运行时独立部署以库集成简化 Serverless 架构 & 拓扑感知调度:提升函数运行时性能
java·架构·serverless·openyuanrong