2016-07-04 2 views
1

Каков наилучший подход к реализации нескольких разных баз данных в одном проекте с использованием Spring JdbcDaoSupport?Использование различных баз данных с помощью Spring jdbcDaoSupport

У меня есть несколько БД с различными источниками данных и синтаксисом: MySQL & Postgres, например. В чистых проектах java-jdbc я использовал шаблоны Factory Method и Abstract Factory и несколько классов DAOimpl (по одному для каждого БД) с общими интерфейсами DAO для переключения между базами данных. Теперь я использую Spring-jdbc и хочу реализовать подобное поведение.

ответ

0

Я столкнулся с тем же вопросом два года назад, и, наконец, я выбрал реализацию на основе «Spring Custom Scope» (http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-scopes-custom).

Весенние рамки позволяют нескольким экземплярам одного и того же определения бобов сосуществовать вместе. Они отличаются только некоторыми контекстуальными настройками.
Например, это определение компонента будет создавать различное loginAction фасоли в зависимости от запроса перерабатываемого в настоящее время HTTP

<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>

Если создать пользовательскую область под названием «домен», вы сможете создать экземпляр несколько источника данных на основе то же определение бобов.
Определение компонента фаз источника данных на основе JndiObjectFactoryBean позволило контейнеру сервлета управлять соединением с базой данных (через файл web.xml). Однако вам придется изменить ваше имя источника данных с помощью свойства Spring.
Бобы, такие как база данных. Менеджер транзакций также должен быть отмечен этой областью.

Далее вам нужно активировать область действия при каждом запуске HTTP-запроса: я могу предложить вам определить имя источника данных в качестве префикса URL-адреса запроса.

Поскольку большинство веб-фреймворков позволяет перехватывать HTTP-запросы, вы можете получить ожидаемый источник данных перед обработкой запроса.
Затем создайте (или повторно) набор бобов, специфичных для выбранного источника данных и хранить его внутри ThreadLocal переменной (что пользовательская реализация сфера будет опираться на)

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

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