当前位置: 代码网 > it编程>编程语言>Java > java-springboot3.2+多数据源+hikari连接池的配置使用

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

2025年11月25日 Java 我要评论
springboot3.2+多数据源+hikari连接池环境springboot3hikari5yml配置spring: datasource: type: com.zaxxer.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连接池内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com