具有自动配置的Spring Data JPA Application的多个数据库

时间:2015-09-09 03:08:31

标签: spring hibernate spring-boot spring-data

我使用Spring Data JPA而不是Spring Boot,这给了我很好的自动配置,所以我不需要为每个实体配置EntityManager和DataSource。

但是,我的应用可能需要连接到两个不同的数据库。因此,我的应用程序中的一些实体需要映射到数据库,而其他实体需要映射到不同的数据库

我已经探索过这个回购 Link

并发现repo为每个实体配置每个EntityManager和TransactionManager。如果我的应用程序有很多实体,那可能会非常耗时。

我是否仍然可以依赖Spring Boot autoconfig进行Spring Data JPA并仍使用两个不同的数据库?

2 个答案:

答案 0 :(得分:4)

每个数据源只需要一个配置,而不是每个实体(每个数据源可以有多个实体)。例如,假设您正在现有数据库之上开发一个系统,其中Product Catalog位于一个数据库中,Inventory信息位于另一个数据库中,Order Information需要进入完全不同的数据库。此外,您(新)应用程序的客户信息需要存储在一个全新的数据库中,因为其他数据库的所有者不允许您触摸他们的。因此,总体而言,您有四个数据库需要处理。

您将需要四个数据源配置,每个数据源配置一个用于您需要处理的四个数据库。每个配置都必须定义:

  1. SQL DataSource,提供有关连接数据库的信息;
  2. 使用EntityManagerFactory;
  3. DataSource
  4. TransactionManager可以使用的EntityManager实施;和
  5. 引用Java包,其中EntityManager可以找到映射到DataSource的实体类。
  6. 如果数据库操作一次只针对一个数据库执行,则可以对每个配置使用JpaTransactionManager(这意味着您将需要四个JpaTransactionManager声明)。但是,如果数据库操作可能跨越多个数据库,您可以声明单个JtaTransactionManager或声明四个JpaTransactionManager(每个DataSource一个)并将它们包装在一个单ChainedTransactionManager(总共五个事务管理器声明)。

    由于您的实体类将绑定到特定数据源,因此您需要使用不同的Java包来隔离它们。例如,您可以org.example.model.catalogorg.example.model.inventoryorg.example.model.orderorg.example.model.customer等。

答案 1 :(得分:1)

不,this is explained in the documentation

sample project向您展示如何配置内容。它对每个持久性单元使用包扫描。