Spring Data多个数据源一个模式

时间:2018-04-20 11:05:02

标签: java spring spring-data multi-tenant

我有1个域模型和两个不同的数据源。此外,我需要在启动时自动生成模式(不能使用hiberante多租户)并且我不能使用RoutingDatasource,因为我需要在调用存储库时明确选择数据库。

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "FranceEntityManagerFactory",
transactionManagerRef = "FranceTransactionManager",
basePackageClasses = {FooRepositoryFrance.class})
public class FranceDbConfig
{
   @Bean
   @ConfigurationProperties(prefix = "france.datasource")
   public HikariDataSource FranceDataSource()
   {
      // init dataSource, transactionManager and EnityManagerFactory...
   }
}

@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "SpainEntityManagerFactory",
transactionManagerRef = "SpainTransactionManager",
basePackageClasses = {FooRepositorySpain.class})
public class SpainDbConfig
{
   @Bean
   @ConfigurationProperties(prefix = "spain.datasource")
   public HikariDataSource SpainDataSource()
   {
      // init dataSource, transactionManager and EnityManagerFactory...
   }
}

@Entity
public class Foo 
{
   // code ...
}

@Transactional("FranceTransactionManager")
public class FooRepositoryFrance extends CrudRepository...

@Transactional("SpainTransactionManager")
public class FooRepositorySpain extends CrudRepository...

无论使用数据源我尝试选择@Transactional(“...”)它总是使用已初始化的数据源,并且可以使用这两个存储库访问实体。

1 个答案:

答案 0 :(得分:0)

可能我回答得很晚,但是您来了。

  1. 我需要在启动时自动生成模式-从不推荐在生产环境中使用。解决方法是使用单个db,然后hibernate将为您生成模式或使用嵌入式db(例如H2),它将在控制台上生成架构创建命令。

  2. 多租户可以用不同的方式完成,我不知道您的确切业务案例,但是您可以- 1。分离数据库,2。分离模式或3.共享模式。 通常使用1和2。 (https://dzone.com/articles/multi-tenancy-using-jpa-spring-and-hibernate-part) (https://dzone.com/articles/multi-tenancy-using-jpa-spring-and-hibernate-part-2

    我不能使用RoutingDatasource,因为我需要在调用存储库时显式选择数据库。 -选择选项2。