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连接池内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Eclipse引用XSD实现XML配置文件提示标签的方法

    Eclipse引用XSD实现XML配置文件提示标签的方法

    今天小编就为大家分享一篇关于Eclipse引用XSD实现XML配置文件提示标签的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • spring boot创建项目包依赖问题的解决

    spring boot创建项目包依赖问题的解决

    本篇文章主要介绍了spring boot创建项目包依赖问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java实现word/pdf转html并在线预览

    Java实现word/pdf转html并在线预览

    这篇文章主要为大家详细介绍了如何利用Java语言实现word、pdf文件转html并在线预览的功能,文中的示例代码讲解详细,需要的可以参考一下
    2023-05-05
  • Mybatis Limit实现分页功能

    Mybatis Limit实现分页功能

    这篇文章主要介绍了Mybatis Limit实现分页功能,使用Limit实现分页可以减少数据的处理量,本文通过代码讲解的非常详细,需要的朋友可以参考下
    2021-04-04
  • Java中Bigdecimal类的toString()方法和toPlainString()方法区别

    Java中Bigdecimal类的toString()方法和toPlainString()方法区别

    BigDecimal类有多个方法可以将其转换为字符串,其中包括toString()和toPlainString(),本文主要介绍了Java中Bigdecimal类的toString()方法和toPlainString()方法区别,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • idea创建项目没有webapp文件夹的解决方法

    idea创建项目没有webapp文件夹的解决方法

    本文主要介绍了idea创建项目没有webapp文件夹的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 使用 Java 将 byte[] 转换为 File 对象并上传到外部服务器的方法(最新推荐)

    使用 Java 将 byte[] 转换为 File 对象并上

    本文展示了如何通过 Java 和 Spring 来处理图像文件的获取、保存和上传,通过 RestTemplate 获取字节数组并将其转换为 File 对象,可以轻松实现从远程 URL 获取文件并将其上传到外部服务器,感兴趣的朋友一起看看吧
    2025-03-03
  • java集合 collection-list-LinkedList详解

    java集合 collection-list-LinkedList详解

    下面小编就为大家带来一篇java集合 collection-list-LinkedList详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • JavaWeb JDBC + MySql 通讯录实现简单的增删改查功能案例详解

    JavaWeb JDBC + MySql 通讯录实现简单的增删改查功能案例详解

    这篇文章主要介绍了JavaWeb JDBC + MySql 通讯录实现简单的增删改查功能,结合具体案例形式详细分析了JavaWeb JDBC + MySql数据库连接、增删改查等相关操作技巧与注意事项,需要的朋友可以参考下
    2019-08-08
  • 深入理解SpringBoot中关于Mybatis使用方法

    深入理解SpringBoot中关于Mybatis使用方法

    这篇文章主要介绍了SpringBoot中关于Mybatis使用方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-03-03

最新评论