java-springboot3.2+多数据源+hikari连接池的配置使用

 更新时间:2025年11月25日 12:10:21   作者:草青工作室  
本文给大家介绍java-springboot3.2+多数据源+hikari连接池的配置使用,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

springboot3.2+多数据源+hikari连接池

环境

  • springboot3
  • hikari5

yml配置

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    zb:
      driver-class-name: dm.jdbc.driver.DmDriver
      #jdbc-url: jdbc:dm://127.0.0.1:5432/ZB 
      url: jdbc:dm://127.0.0.1:5432/ZB
      username: zb
      password: xxxxxx
      hikari:
        pool-name: HikariPool-ZB
        connection-timeout: 10000  #连接超时时间
        validation-timeout: 3000  #
        idle-timeout: 60000 #一个连接idle状态的最大时长(毫秒),超时则被释放,默认:10分钟
        login-timeout: 5
        max-lifetime: 60000 #连接空闲后的最大存活时间
        maximum-pool-size: 15  #最大连接数
        minimum-idle: 6   #最小连接数
        auto-commit: true
        connection-test-query: select 1
    ty:
      driver-class-name: dm.jdbc.driver.DmDriver
      #jdbc-url: jdbc:dm://127.0.0.1:5432/SCJH_TY
      url: jdbc:dm://127.0.0.1:5432/SCJH_TY
      username: scjh_ty
      password: xxxxxx
      hikari:
        pool-name: HikariPool-TY
        connection-timeout: 10000  #连接超时时间
        validation-timeout: 3000  #
        idle-timeout: 60000 #一个连接idle状态的最大时长(毫秒),超时则被释放,默认:10分钟
        login-timeout: 5
        max-lifetime: 60000 #连接空闲后的最大存活时间
        maximum-pool-size: 15  #最大连接数
        minimum-idle: 5   #最小连接数
        auto-commit: true
        connection-test-query: select 1

数据源配置

有两个数据源配置,所以写了2个config,分开写看着比较清晰,其中zb为主链接
需要注意几点:

  • 不使用DataSourceProperties对象
    • 创建的HikariDataSource时,yml中要用spring.datasourc.xx下边要用jdbc-url属性,否则会报错;
    • 使用DataSourceProperties对象创建的HikariDataSource时,要用jdbc-url属性;
  • 指定hikari.pool-name
    • 需要创建个DataSourceProperties bean,基于这个对象再创建HikariDataSource,此时连接池配置生效;

DbZbConfiguration.java

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.log4j.Log4j2;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
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.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration()
@Log4j2
public class DbZbConfiguration {
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ZB库
    @Bean("zbDataSourceProperties")
    @ConfigurationProperties("spring.datasource.zb")
    @Primary
    public DataSourceProperties zbDataSourceProperties() {
        return new DataSourceProperties();
    }
    @Bean(name = "zbDataSource")
    @ConfigurationProperties("spring.datasource.zb.hikari")
    @Primary
    public HikariDataSource dataSource() {
        //HikariDataSource dataSource = (HikariDataSource) DataSourceBuilder.create().build();
        HikariDataSource dataSource = zbDataSourceProperties()
                .initializeDataSourceBuilder()
                .type(HikariDataSource.class)
                .build();
        return dataSource;
    }
    @Bean(name="zbTransactionManager")
    @Primary
    DataSourceTransactionManager transactionManager(@Qualifier("zbDataSource") DataSource datasource) {
        DataSourceTransactionManager txm  = new DataSourceTransactionManager(datasource);
        return txm;
    }
    @Bean(name = "zbSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("zbDataSource") DataSource dataSource) throws Exception {
        //解决: Invalid bound statement (not found) 异常
//        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
//        sessionFactory.setDataSource(datasource);
//        return sessionFactory.getObject();
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        //SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //设置mybatis的xml所在位置
        Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*Mapper.xml");
        bean.setMapperLocations(resources);
        SqlSessionFactory factory = bean.getObject();
        log.info(">>> ZB数据源连接字符串: {}", ((HikariDataSource) dataSource).getJdbcUrl());
        return factory;
    }
    @Bean(name = "zbSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("zbSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSessionTemplate;
    }
}

DbTyConfiguration.java

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.log4j.Log4j;
import lombok.extern.log4j.Log4j2;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
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.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@Log4j2
public class DbTyConfiguration {
    @Bean("tyDataSourceProperties")
    @ConfigurationProperties("spring.datasource.ty")
    @Primary
    public DataSourceProperties tyDataSourceProperties() {
        return new DataSourceProperties();
    }
    @Bean(name = "tyDataSource")
    @ConfigurationProperties("spring.datasource.ty.hikari")
    public HikariDataSource tyDataSource() {
        //HikariDataSource dataSource = (HikariDataSource) DataSourceBuilder.create().build();
        HikariDataSource dataSource = tyDataSourceProperties()
                .initializeDataSourceBuilder()
                .type(HikariDataSource.class)
                .build();
        return dataSource;
    }
    @Bean(name="tyTransactionManager")
    DataSourceTransactionManager tyTransactionManager(@Qualifier("tyDataSource") DataSource datasource) {
        DataSourceTransactionManager txm  = new DataSourceTransactionManager(datasource);
        return txm;
    }
    @Bean(name = "tySqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("tyDataSource") DataSource dataSource) throws Exception {
        //解决: Invalid bound statement (not found) 异常
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        //SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //设置mybatis的xml所在位置
        Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*Mapper.xml");
        bean.setMapperLocations(resources);
        SqlSessionFactory factory = bean.getObject();
        log.info(">>> TY数据源连接字符串: {}", ((HikariDataSource) dataSource).getJdbcUrl());
        return factory;
    }
    @Bean(name = "tySqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("tySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSessionTemplate;
    }
}

多数源的使用

这种配置可以按需对mapper进行初始化,主要解决的是相同表结构不同数据库之间,公用相同mapper的问题。
避免mapper实例重复,多个mapper bean可以使用下面的方式注入:

    @Bean("secondMapper")
    public SecondMapper getMapper(){
        var tySqlSessionFactory = (SqlSessionFactory)SpringUtil.getBean("tySqlSessionFactory");
        var session = tySqlSessionFactory.openSession();
        var mapper = session.getMapper(SecondMapper.class);
        return mapper;
    }

到此这篇关于java-springboot3.2+多数据源+hikari连接池的配置使用的文章就介绍到这了,更多相关springboot 多数据源hikari连接池内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Task定时任务每天零点执行一次的操作

    Spring Task定时任务每天零点执行一次的操作

    这篇文章主要介绍了Spring Task定时任务每天零点执行一次的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 基于strict-origin-when-cross-origin问题的解决

    基于strict-origin-when-cross-origin问题的解决

    这篇文章主要介绍了基于strict-origin-when-cross-origin问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Spring框架中一个有用的小组件之Spring Retry组件详解

    Spring框架中一个有用的小组件之Spring Retry组件详解

    Spring Retry 是从 Spring batch 中独立出来的一个功能,主要实现了重试和熔断,对于那些重试后不会改变结果,毫无意义的操作,不建议使用重试,今天通过本文给大家介绍Spring Retry组件详解,感兴趣的朋友一起看看吧
    2021-07-07
  • 使用@RequestParam设置默认可以传空值

    使用@RequestParam设置默认可以传空值

    这篇文章主要介绍了使用@RequestParam设置默认可以传空值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java正则表达式的简单运用

    java正则表达式的简单运用

    这篇文章主要为大家详细介绍了java正则表达式的简单运用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • java Lombok之@Accessors用法及说明

    java Lombok之@Accessors用法及说明

    这篇文章主要介绍了java Lombok之@Accessors用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java JVM虚拟机调优详解

    Java JVM虚拟机调优详解

    JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的,本文主要介绍了jvm调优,感兴趣的小伙伴们可以参考一下<BR>
    2022-07-07
  • SpringBoot短信登录安全防护方案

    SpringBoot短信登录安全防护方案

    本文提出了一套基于手机短信验证码的安全登录方案,采用多层次防护机制确保系统安全,下面就来详细的介绍一下,感兴趣的可以了解一下
    2026-01-01
  • Java利用EasyExcel读取写入Excel详情

    Java利用EasyExcel读取写入Excel详情

    这篇文章主要介绍了Java利用EasyExcel读取写入Excel详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • java实现静默加载Class示例代码

    java实现静默加载Class示例代码

    这篇文章主要给大家介绍了关于java实现静默加载Class的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10

最新评论