首先说明一点有问题查官方文档学官方example。
多数据源需要手工设置 DataSource, EntityManagerFactory 和 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;
}
}
这篇博客介绍了如何在Spring Data JPA 2.5.X中配置多数据源。通过官方文档和示例,详细阐述了DataSourceConfig的设置,以及针对不同数据库的JpaRepositories配置,包括Repository接口和实体包的扫描位置。
8791

被折叠的 条评论
为什么被折叠?



