我只想针对多个数据源一种存储库实现类。
想象一下,有多个国家(及其数据库)有1个应用程序,所有国家/地区的所有存储库都相同。
基本结构如下:
org.company.name
.config.{country-shortcut}Config
.repository.{country-shortcut}.SameRepository{country-shortcut}
.. other parts ..
存储库类如下所示:
package org.company.name.repository.{country-shortcut}.SomethingRepository
public class SomethingRepository extends CrudRepository<Something, Long> {
... some methods ...
}
现在让我们看一下实施方案。.我们现在将英国作为我们的国家。
国家/地区存储库类,用于某些国家/地区。
package org.company.name.repository.uk.SomethingRepositoryUk
public class SomethingRepositoryUk extends SomethingRepository {}
每个数据源的基本配置。我有多个配置(每个国家/地区一个)。
package org.company.name.config.UkConfig
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryUK",
transactionManagerRef = "transactionManagerUK",
basePackages = {"org.company.name.repository.uk"})
public class UkConfig {
@Autowired
private Environment env;
@Bean(name = "dataSourceUk")
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
... datasource settings (url, user, pass, etc.) ...
return dataSource;
}
@Bean(name = "entityManagerFactoryUk")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("dataSourceUk") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("org.company.name.repository.model")
.persistenceUnit("uk")
.build();
}
@Bean(name = "transactionManagerUk")
public PlatformTransactionManager transactionManager(
@Qualifier("entityManagerFactoryUk") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
Config对我来说还好,但是有可能没有多个存储库(每个存储库用于国家/地区,所有内容都相同..)?这让我很困扰,因为它似乎是一个不干净的实现。