您只需要每个数据源一个配置,而不是每个实体(每个数据源可以有多个实体)。例如,假设您正在现有数据库的顶部开发一个系统,其中产品目录位于一个数据库中,另一个库存信息以及订单信息需要进入完全不同的数据库。此外,您的(新)应用程序的客户信息将需要存储在一个全新的数据库中,因为其他数据库的所有者不允许您触摸他们。所以,总的来说,你有四个数据库来处理。
您需要四个数据源配置,一个用于需要处理的四个数据库。每个配置必须定义:
- SQL
DataSource
提供有关连接到数据库的信息;
- 使用
DataSource
的EntityManagerFactory
;
- A
TransactionManager
执行表示EntityManager
可以使用;和
- 引用Java程序包,其中
EntityManager
可以找到映射到DataSource
的实体类。
如果数据库操作是这样的,他们是在同一时间对只有一个数据库中执行,则可以使用JpaTransactionManager
s的每个配置(这意味着你将需要四个JpaTransactionManager
声明)。但是,如果数据库操作可能跨越多个数据库,则可以声明一个JtaTransactionManager
或声明四个JpaTransactionManager
(每个DataSource
都一个)并将它们包装在一个ChainedTransactionManager
(总共创建五个事务管理器声明) 。
由于您的实体类将被绑定到特定的数据源,因此您将需要使用不同的Java包对它们进行分隔。您可以例如org.example.model.catalog
,org.example.model.inventory
, org.example.model.order
, org.example.model.customer
等
如何将这些'EntityManagerFactory'从Spring Data JPA链接到每个存储库接口? – IllSc
将LocalContainerEntityManagerFactoryBean的'packagesToScan'属性设置为实体管理器应该查找存储库接口的值(例如,'org.example.data.customer')。 – manish