SpringBoot程序化初始化HikariCP连接池 && SpringBoot配置额外的数据源

场景

在使用SpringBoot的服务中, 需要同时连接自己的数据库进行增删改查, 也需要连接一个外部提供的数据库查询数据. 因此需要维护两套数据库配置.
通过在代码中手动初始化两个HikariCP的Datasource来生成两个不同的Datasource使用. 并且配置时仅需要按照官方配置格式来配置数据源、只需要修改配置前缀即可, 不需要自己去定义配置POJO.

具体实现

1. 主数据库配置

主数据库配置

import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

@Configuration
public class DatabaseConfiguration {

    // 设置为首选项
    @Primary
    @Bean(name = "primaryDataSourceProperties")
    // 指定前缀
    @ConfigurationProperties("spring.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    // 设置为首选项
    @Primary
    @Bean(name = "dataSource")
    // 指定前缀
    @ConfigurationProperties("spring.datasource.hikari")
    public HikariDataSource firstDataSource(DataSourceProperties firstDataSourceProperties) {
        return firstDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }


}

第二套数据库配置


import com.zaxxer.hikari.HikariDataSource;
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.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

@Configuration
public class DatabaseShareConfiguration {

    @Bean(name = "shareDataSourceProperties")
    // 指定数据库配置前缀,然后可以通过 share.datasource.url 这种格式去配置第二套数据源配置
    @ConfigurationProperties("share.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean(name = "shareDataSource")
    // 指定数据库配置前缀,然后可以通过 share.datasource.hikari.poolName 这种格式去配置第二套数据源配置
    @ConfigurationProperties("share.datasource.hikari")
    public DataSource dataSource(@Qualifier("shareDataSourceProperties") DataSourceProperties dataSourceProperties) {
        return dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }


    
}

application.yml

# 主数据库配置
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    username: root
    url: jdbc:mysql://localhost:3306/
    password: 
    hikari:
      poolName: Hikari
      auto-commit: false

# 第二套数据库配置
share:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://localhost:3307/
    username: root
    password:
    hikari:
      poolName: Share-Hikari
      auto-commit: false
posted @ 2024-07-05 16:25  小小记录本  阅读(6)  评论(0编辑  收藏  举报