Spring Data Jpa 2.5.X多数据源配置

这篇博客介绍了如何在Spring Data JPA 2.5.X中配置多数据源。通过官方文档和示例,详细阐述了DataSourceConfig的设置,以及针对不同数据库的JpaRepositories配置,包括Repository接口和实体包的扫描位置。

首先说明一点有问题查官方文档学官方example。

官方文档链接

官方example链接

多数据源需要手工设置 DataSourceEntityManagerFactory 和 JpaTransactionManager。下边直接上代码

1.application.properties配置

spring.datasource.db1.jdbcurl = xxxxxxxxxxxxxxxxxxxxx
spring.datasource.db1.username = xxxx
spring.datasource.db1.password = xxxx

spring.datasource.db2.jdbcurl = xxxxxxxxxxxxxxxxxxx
spring.datasource.db2.username = xxxx
spring.datasource.db2.password = xxxx

2.DataSourceConfig配置数据源

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 javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Bean(name = "db1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource db1DataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "db2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource db2DataSource() {
        return DataSourceBuilder.create().build();
    }

}

3.数据库1的JpaRepositories配置Db1Config

import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "db1EntityManagerFactory",
        transactionManagerRef = "db1TransactionManager",
        basePackages = {"com.xxx.xxx.db1"})
public class Db1Config {

    @Autowired
    @Qualifier("db1DataSource")
    private DataSource db1DataSource;

    @Bean
    PlatformTransactionManager db1TransactionManager() {
        return new JpaTransactionManager(db1EntityManagerFactory().getObject());
    }

    @Bean
    LocalContainerEntityManagerFactoryBean db1EntityManagerFactory() {

        var jpaVendorAdapter = new HibernateJpaVendorAdapter();
        jpaVendorAdapter.setGenerateDdl(false);

        var factoryBean = new LocalContainerEntityManagerFactoryBean();

        factoryBean.setDataSource(db1DataSource);
        factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
        factoryBean.setPackagesToScan("com.xxx.xxxx.db1");

        return factoryBean;
    }


}

 注意:

basePackages = {"com.xxx.xxx.db1"}配置的是数据库1对应的Repository接口包扫描位置。factoryBean.setPackagesToScan("com.xxx.xxxx.db1")配置的是数据库1对应的实体包扫描位置。

4.数据库2的JpaRepositories配置Db2Config

import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
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.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "db2EntityManagerFactory",
        transactionManagerRef = "db2TransactionManager",
        basePackages = {"com.xxx.xxx.db2"})
public class Db2Config {
    @Autowired
    @Qualifier("db2DataSource")
    private DataSource db2DataSource;

    @Bean
    PlatformTransactionManager db2TransactionManager() {
        return new JpaTransactionManager(db2EntityManagerFactory().getObject());
    }

    @Bean
    LocalContainerEntityManagerFactoryBean db2EntityManagerFactory() {

        var jpaVendorAdapter = new HibernateJpaVendorAdapter();
        jpaVendorAdapter.setGenerateDdl(false);

        var factoryBean = new LocalContainerEntityManagerFactoryBean();

        factoryBean.setDataSource(db2DataSource);
        factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
        factoryBean.setPackagesToScan("com.xxx.xxx.db2");

        return factoryBean;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值