[英]Spring Boot, Spring Data JPA with Multiple Hikari DataSources and Single Data source Configuration Java File
如何創建具有 application.properties 中提到的多個數據源配置的單個配置 java 文件,以便同時添加任意“n”個數據源。 它必須使用相同的配置文件自動處理所有數據源。
此外,所有數據源必須使用相同的 JPARepository 來查詢數據。 此外,我想創建一個實體管理器列表來對特定數據源執行特定操作。
應用程序屬性
site1.url=jdbc:postgresql://localhost:4567/postgres
site1.username=someUsername
site1.password=somePassword
site2.url=jdbc:postgresql://localhost:5433/postgres
site2.username=someUsername
site2.password=somePassword
站點配置文件
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "site1EntityManager",
transactionManagerRef = "site1TransactionManager",
basePackages = "com.someProject.repositoryInterface"
)
public class Site1Config extends HikariConfig {
@Autowired
private Environment environment;
@Primary
@Bean(name = "site1EntityManager")
public HikariDataSource mysqlDataSource() {
setJdbcUrl(environment.getProperty("site1.url"));
setUsername(environment.getProperty("site1.username"));
setPassword(environment.getProperty("site1.password"));
return new HikariDataSource(this);
}
@Primary
@Bean(name = "site1EntityManager")
public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(mysqlDataSource())
.packages(ModelClass.class)
.persistenceUnit("site1PU")
.build();
}
@Primary
@Bean(name = "site1TransactionManager")
public PlatformTransactionManager mysqlTransactionManager(@Qualifier("site1EntityManager") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
這是單數據源配置文件的基本示例。 我想將 SiteConfiguration 作為“站點(編號)”形式的通用類,並為每個案例創建一個單獨的數據源和實體管理器。
它應該自動從 application.properites 中獲取數據源的數量,並且應該配置在屬性文件中提到的所有數據源。
此外,每個數據源都必須使用相同的 JPARepository。
據我了解,您需要根據您在application.properties 中聲明的站點數量創建“N”個數據源。 我看到的唯一方法是您的DataSource bean應該動態創建,而不是靜態綁定到您的 application.properties。
在 Spring 中有一種方法是結合使用“ConfigurableBeanFactory”和“BeanFactoryAware”。
在 StackOverflow 中已經有一個答案:這里
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.