一个用于不同数据源的存储库

时间:2018-08-11 09:37:49

标签: java spring-data datasource

我只想针对多个数据源一种存储库实现

想象一下,有多个国家(及其数据库)有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对我来说还好,但是有可能没有多个存储库(每个存储库用于国家/地区,所有内容都相同..)?这让我很困扰,因为它似乎是一个不干净的实现。

0 个答案:

没有答案