2015-09-09 6 views
2

Im, используя Spring Data JPA над Spring Boot, которые дают мне хорошую автоконфигурацию, поэтому мне не нужно настраивать EntityManager и DataSource для каждого объекта.Несколько баз данных для Spring Data JPA Приложение с автоконфигурациями

Однако моему приложению может потребоваться подключение к двум различным базам данных. Таким образом, некоторые из субъектов на мое приложение должны быть отображены в базе данных, в то время как другие объекты должны быть преобразованы в другую базу данных

Я исследовал этот репо Link

И выяснили, что настроить репо каждый EntityManager и TransactionManager для каждого объекта. Это может занять много времени, если в моем приложении много объектов.

Возможно ли, что я все еще полагаюсь на Autoconfig Spring Boot для Spring Data JPA и все еще использует две разные базы данных?

ответ

4

Вам нужна только одна конфигурация для каждого источника данных, а не для каждого объекта (каждый источник данных может иметь несколько объектов). Например, предположим, что вы разрабатываете систему поверх существующих баз данных, где Каталог продуктов находится в одной базе данных, информация инвентаризации в другой, а информация о заказе должна поступать в совершенно другую базу данных. Кроме того, информация о клиентах вашего (нового) приложения должна быть сохранена в новой базе данных, поскольку владельцы других баз данных не позволят вам коснуться их. Итак, в целом у вас есть четыре базы данных для решения.

Вам понадобятся четыре конфигурации источника данных, по одному для каждой из четырех баз данных, с которыми вам нужно иметь дело. Каждая конфигурация должна определять:

  1. SQL DataSource для предоставления информации о подключении к базе данных;
  2. EntityManagerFactory, который использует DataSource;
  3. A TransactionManager осуществление, которое может использовать EntityManager; и
  4. Ссылка на пакет 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 и т.д.

+0

Как связать эти 'EntityManagerFactory' для каждого Repository интерфейса от Spring Data JPA? – IllSc

+0

Задайте для свойства 'packageToScan'' LocalContainerEntityManagerFactoryBean' значение, в котором менеджер объектов должен искать интерфейсы репозитория (например, 'org.example.data.customer'). – manish

Смежные вопросы