java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot 多数据源hikari连接池

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

作者:草青工作室

本文给大家介绍java-springboot3.2+多数据源+hikari连接池的配置使用,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

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

环境

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为主链接
需要注意几点:

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

您可能感兴趣的文章:
阅读全文