【问题标题】:Spring Data multiple data sources one schemaSpring Data 多数据源一种模式
【发布时间】:2018-07-22 06:27:08
【问题描述】:

我有 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("...") 选择数据源,它始终使用已初始化的数据源,并且实体可通过两个存储库访问。

【问题讨论】:

    标签: java spring spring-data multi-tenant


    【解决方案1】:

    可能是我回答的很晚,但你去吧。

    1. 我需要在启动时自动生成架构 - 不建议在生产环境中使用。解决方法是使用单个数据库,然后休眠将为您生成架构或使用嵌入式数据库(例如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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-06
      • 2018-09-01
      • 2018-12-11
      • 2015-04-01
      • 1970-01-01
      • 2020-07-28
      • 2018-09-29
      相关资源
      最近更新 更多