Как использовать несколько приложений Spring-Data с общей базой данных - PullRequest
1 голос
/ 25 марта 2019

У меня есть приложение Spring, которое использует данные Spring для доступа к базе данных.Теперь есть еще одно приложение, которому необходимо обновить ту же базу данных, используя только Hibernate / JPA для доступа к данным.

Если я обновлю данные из APP2, они не будут видны в APP1 через данные источника, потому что базовый EntityManager не будет обновлен.

Есть ли какие-либо изрешение, как обеспечить эту функциональность?Очевидно, что я могу думать о том, чтобы:

  • создать общий слой REST для выполнения этих операций
  • Общий распределенный кэш, такой как Hazelcast, Redis

Iхочу избежать первого варианта, из-за необходимости рефакторинга APP1.Я не уверен в том, как будет работать второй, то есть:

  • общие объекты между APP1 и APP2 будут храниться в распределенном кеше и всегда читать оттуда.
  • обновления будутвыполняется через соответствующий уровень доступа - APP1 будет использовать свои репозитории данных Spring, APP2 - сервис Hibernate / JPA (однако EntityManager все равно не будет обновляться с возможными изменениями из другого приложения).

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

После некоторого изучения и тестирования я обнаружил, что Spring-data вместе с Hibernate правильно справляются с этой ситуацией.

Мой тест основан на чистом Hibernate / JPA, и при использовании двух EntityManager правильно я не вижу изменений, внесенных одним из них в другой (я создал EntityManager как член класса обслуживания во время создания) , Однако, что делает Spring-data, так это то, что он открывает новый Hibernate Session для каждого вызова метода @Transactional и закрывает его, когда это будет сделано.

Таким образом, проблема, скорее, заключается в конкретной бизнес-логике, поскольку она зависит от контекста метода @Transactional, если для него вполне возможно "по возможности" работать с устаревшими данными во время вызова метода.

0 голосов
/ 25 марта 2019

Вы можете использовать spring-data-hazelcast с Mapstore API . Это дает вам минимальное влияние на ваши приложения, но требует реализации Mapstore. Если вы решите использовать Hazelcast во встроенном режиме, это может быть даже лучше, потому что вам не нужно управлять отдельным центральным кешем. Hazelcast масштабируется в зависимости от требований вашего приложения

...