Использование нескольких баз данных в приложении Spring JPA - PullRequest
2 голосов
/ 19 августа 2011

У меня есть приложение Spring, которое поддерживает одного клиента.

Я хотел бы расширить это приложение для поддержки нескольких клиентов, где база данных каждого клиента хранится в отдельной базе данных. Схема для базы данных одинакова для каждого клиента, и одинаковые DAO и бизнес-логика должны оставаться прежними.

Как бы я достиг этого с помощью Spring / JPA? Нужно ли мне иметь несколько контекстов персистентности и подключаться к соответствующей фабрике диспетчера сущностей на основе текущего пользователя? Есть ли примеры реализации чего-то похожего на это?

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Я бы не советовал запускать отдельную базу данных под одним приложением.Если перепроектирование модели данных для включения нескольких клиентов не является вариантом, почему бы вам не запустить несколько экземпляров сервера приложений / веб-контейнера, по одному для каждого клиента?В противном случае вам придется иметь дело с недостатками общей платформы и изолированных баз данных.

С несколькими базами данных клиентов и одним приложением ваш код станет более сложным, вы не можете гарантировать, что данные клиентаполностью изолированы (например, из-за ошибки в приложении, клиенту показываются неверные данные, поэтому нет особой выгоды изолировать каждого клиента), и у вас будет кошмар обслуживания каждой базы данных клиентов.Кроме того, имея разные базы данных, вы можете практически гарантировать, что кто-то заостренный попросит предоставить клиенту А какую-то специальную функциональность, оставив функциональность клиента Б без изменений, потому что «... это будет легко, поскольку у нас есть разные базы данных... ", забывая, что приложение является общим.

0 голосов
/ 19 августа 2011

Если вы действительно, действительно хотите иметь отдельные базы данных для конкретных клиентов, это был бы способ пойти & mdash; определить отдельные постоянные единицы с теми же определениями сущностей, но с разными конфигурациями фабрики менеджера сущностей.

Для меня это больше похоже на необходимость перепроектировать структуру базы данных. Я предполагаю, что приложение было написано только для одного клиента, и оказалось, что на горизонте появилось больше, так что, давайте, сделаем что-нибудь и быстро! Вы не пытаетесь копировать-вставить, но в большем масштабе? У вас будет много избыточности с JPA, если вы хотите иметь несколько баз данных с одинаковой структурой: например, все, что определено в файле сопоставления (запросы, сопоставления отношений сущностей и т. Д.), Определяется на постоянство блок & mdash; вам придется повторить эти определения и синхронизировать их все.

Я остановлюсь здесь, поскольку это всего лишь догадки, из-за отсутствия более широкого описания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...