我有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(“...”)它总是使用已初始化的数据源,并且可以使用这两个存储库访问实体。
答案 0 :(得分:0)
可能我回答得很晚,但是您来了。
我需要在启动时自动生成模式-从不推荐在生产环境中使用。解决方法是使用单个db,然后hibernate将为您生成模式或使用嵌入式db(例如H2),它将在控制台上生成架构创建命令。
多租户可以用不同的方式完成,我不知道您的确切业务案例,但是您可以- 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。