Вам нужна только одна конфигурация для каждого источника данных, а не для каждого объекта (каждый источник данных может иметь несколько объектов). Например, предположим, что вы разрабатываете систему поверх существующих баз данных, где Каталог продуктов находится в одной базе данных, информация инвентаризации в другой, а информация о заказе должна поступать в совершенно другую базу данных. Кроме того, информация о клиентах вашего (нового) приложения должна быть сохранена в новой базе данных, поскольку владельцы других баз данных не позволят вам коснуться их. Итак, в целом у вас есть четыре базы данных для решения.
Вам понадобятся четыре конфигурации источника данных, по одному для каждой из четырех баз данных, с которыми вам нужно иметь дело. Каждая конфигурация должна определять:
- SQL
DataSource
для предоставления информации о подключении к базе данных;
EntityManagerFactory
, который использует DataSource
;
- A
TransactionManager
осуществление, которое может использовать EntityManager
; и
- Ссылка на пакет Java, где
EntityManager
может найти классы сущностей, сопоставленные с DataSource
.
Если операции базы данных таковы, что они выполняются только против одной базы данных в то время, вы можете использовать JpaTransactionManager
с с каждой конфигурацией (это означает, что вам потребуется четыре JpaTransactionManager
декларации). Однако, если операции с базой данных могут охватывать более одной базы данных, вы можете объявить один JtaTransactionManager
или объявить четыре JpaTransactionManager
s (по одному для каждого из DataSource
s) и обернуть их в один ChainedTransactionManager
(в общей сложности пять заявлений менеджера транзакций) ,
Поскольку ваши классы сущностей будут привязаны к определенному источнику данных, вам нужно будет отделить их, используя различные пакеты Java. Например, вы можете иметь org.example.model.catalog
, org.example.model.inventory
, org.example.model.order
, org.example.model.customer
и т.д.
Как связать эти 'EntityManagerFactory' для каждого Repository интерфейса от Spring Data JPA? – IllSc
Задайте для свойства 'packageToScan'' LocalContainerEntityManagerFactoryBean' значение, в котором менеджер объектов должен искать интерфейсы репозитория (например, 'org.example.data.customer'). – manish