您只需要每個數據源一個配置,而不是每個實體(每個數據源可以有多個實體)。例如,假設您正在現有數據庫的頂部開發一個系統,其中產品目錄位於一個數據庫中,另一個庫存信息以及訂單信息需要進入完全不同的數據庫。此外,您的(新)應用程序的客戶信息將需要存儲在一個全新的數據庫中,因爲其他數據庫的所有者不允許您觸摸他們。所以,總的來說,你有四個數據庫來處理。
您需要四個數據源配置,一個用於需要處理的四個數據庫。每個配置必須定義:
- 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