springboot druid mybatis多数据源配置方式

 更新时间:2023年12月15日 16:32:18   作者:VergilOpen  
这篇文章主要介绍了springboot druid mybatis多数据源配置方式,具有很好的参考价值,希望对大家有所帮助,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

springboot druid mybatis多数据源配置

spring boot 在配置时做了很多简化配置的设置,但是简化的配置往往已牺牲一定的定制化,比如在数据源的配置时,spring boot 只提供4种数据库连接池的配置,其中并不支持常用的druid

阅读spring boot DataSourceBuilder 的源码可以发现 spring boot 提供的4种数据源类型并不是我们想要的

private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] {
            "org.apache.tomcat.jdbc.pool.DataSource",
            "com.zaxxer.hikari.HikariDataSource",
            "org.apache.commons.dbcp.BasicDataSource", // deprecated
            "org.apache.commons.dbcp2.BasicDataSource" };

但是 DataSourceBuilder 提供了type方法来自定义DataSource类型

public DataSourceBuilder type(Class<? extends DataSource> type) {
        this.type = type;
        return this;
    }

知道了方法,下面配置就简单许多了

首先是application.properties文件的配置

spring.datasource.sso.url=jdbc:mysql://localhost:3306/sso?useSSL=false
spring.datasource.sso.username=root
spring.datasource.sso.password=root
spring.datasource.sso.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.sso.max-idle=5
spring.datasource.sso.max-wait=10000
spring.datasource.sso.min-idle=1
spring.datasource.sso.initial-size=1
spring.datasource.sso.validation-query=SELECT 1
spring.datasource.sso.test-on-borrow=false
spring.datasource.sso.test-while-idle=true
spring.datasource.sso.time-between-eviction-runs-millis=18800

spring.datasource.message.url=jdbc:mysql://localhost:3306/message?useSSL=false
spring.datasource.message.username=root
spring.datasource.message.password=root
spring.datasource.message.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.message.max-idle=5
spring.datasource.message.max-wait=10000
spring.datasource.message.min-idle=1
spring.datasource.message.initial-size=1
spring.datasource.message.validation-query=SELECT 1
spring.datasource.message.test-on-borrow=false
spring.datasource.message.test-while-idle=true
spring.datasource.message.time-between-eviction-runs-millis=18800

然后是具体的主数据源配置类

@Configuration
@MapperScan(basePackages = {"org.vergil.demo.core.dao.mapper.sso"}, sqlSessionFactoryRef = "ssoSqlSessionFactory")
public class SsoConfig {
    @Bean(name = "ssoDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.sso")
    @Primary
    public DataSource ssoDataSource() {
        //指定使用DruidDataSource
        return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();
    }

    @Bean(name = "ssoSqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("ssoDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
//        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/sso/*.xml"));
        return bean.getObject();
    }

    @Primary
    @Bean(name = "ssoTransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("ssoDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Primary
    @Bean(name = "ssoSqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("ssoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

_ @ConfigurationProperties(prefix = “spring.datasource.sso”) 引入配置项_

使用如下方式创建DruidDataSource

简化配置

return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();

第二数据源

@Configuration
@MapperScan(basePackages = {"org.vergil.demo.core.dao.mapper.message"}, sqlSessionFactoryRef = "messageSqlSessionFactory")
public class MessageConfig {
    @Bean(name = "messageDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.message")
    public DataSource messageDataSource() {
        return DataSourceBuilder.create().type(com.alibaba.druid.pool.DruidDataSource.class).build();
    }

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

    @Bean(name = "messageTransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("messageDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "messageSqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("messageSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

数据源配置完毕

每个数据源都会生成自己的sqlSession,相互独立

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java连接Mysql数据库详细代码实例

    Java连接Mysql数据库详细代码实例

    这篇文章主要介绍了Java连接Mysql数据库详细代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java BigDecimal解决double精度丢失的问题

    Java BigDecimal解决double精度丢失的问题

    我们在日常开发中, 有很多时候会遇到小数(double类型)精确计算,本文主要介绍了Java BigDecimal解决double精度丢失的问题,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Spring Boot 如何整合连接池

    Spring Boot 如何整合连接池

    这篇文章主要介绍了Spring Boot 如何整合连接池,帮助大家更好的理解和学习spring boot框架,感兴趣的朋友可以了解下
    2020-11-11
  • 如何在Java中创建线程通信的四种方式你知道吗

    如何在Java中创建线程通信的四种方式你知道吗

    开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。下面我们来一起学习如何解决吧
    2021-09-09
  • springbatch的封装与使用实例详解

    springbatch的封装与使用实例详解

    主要实现批量数据的处理,我对batch进行的封装,提出了jobBase类型,具体job需要实现它即可。这篇文章主要介绍了springbatch的封装与使用 ,需要的朋友可以参考下
    2019-04-04
  • 使用curator实现zookeeper锁服务的示例分享

    使用curator实现zookeeper锁服务的示例分享

    这篇文章主要介绍了使用curator实现zookeeper锁服务的示例,需要的朋友可以参考下
    2014-02-02
  • 邮件收发原理你了解吗? 邮件发送基本过程与概念详解(一)

    邮件收发原理你了解吗? 邮件发送基本过程与概念详解(一)

    你真的了解邮件收发原理吗?这篇文章主要为大家详细介绍了邮件发送基本过程与概念,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java并发工具之Exchanger线程间交换数据详解

    Java并发工具之Exchanger线程间交换数据详解

    这篇文章主要介绍了Java并发工具之Exchanger线程间交换数据详解,Exchanger是一个用于线程间协作的工具类,Exchanger用于进行线程间的数据交 换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据,需要的朋友可以参考下
    2023-12-12
  • SpringCloud之Admin服务监控实现流程示例详解

    SpringCloud之Admin服务监控实现流程示例详解

    这篇文章主要为大家介绍了SpringCloud之Admin服务监控流程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java设计模式之职责链模式详解

    Java设计模式之职责链模式详解

    Java设计模式中有很多种类别,例如单例模式、装饰模式、观察者模式等。本文将为大家详细介绍其中的职责链模式,感兴趣的可以了解一下
    2021-12-12

最新评论