В моем приложении mvc весны мне нужно подключиться к нескольким базам данных в определенное время на основе функциональности, выбранной пользователем в интерфейсе. Скажу:Управление несколькими источниками данных в Spring MVC
1.I имеет 3 различных сред (Prod, PRE-Прод и стадирование и многое другое ...)
2.User хочет видеть список таблиц из данной базы данных. Пользователь выберет элемент из поля выбора и отправит его. Основываясь на выборе пользователя, ему необходимо подключиться к соответствующей базе данных и получить результаты.
3.Some раз некоторые базы данных могут пойти вниз и если я создаю источник данных JNDI для каждой базы данных и сопоставить их JdbcTemplate и все эти jdbcTemplaates определяются как свойства в моей DAO как
<bean id="prodDataSource" ref="prodDSPool"/>
<bean id="preProdDataSource" ref="preProdDSPool"/>
<bean id="statgingDataSource" ref="stagingDSPool" />
...
...
И у меня есть еще один компонент, который является ничем иным, кроме моего DAO
<bean id="myConnectionsDAO" class="com.example.MyConnectionsDAOImpl">
<property name="prodDataSource">
<ref bean="prodDataSource"/>
</property>
<property name="preProdDataSource">
<ref bean="preProdDataSource"/>
</property>
<property name="preProdDataSource">
<ref bean="preProdDataSource"/>
</property>
</bean>
и MyConnectionDAO является POJO с геттер и сеттеры для перечисленных выше свойств.
Как я уже говорил выше, зависит от выбора пользователя моего класса службы получает соответствующий источник данных и строит JdbcTemplate и запрашивает базу данных, как
if(env.equalsIgnoreCase(EnvEnum.PROD.toString())
{
JdbcTemplate prodTemplate = new JdbcTemplate(myConnectionsDAO.getProdDataSource());
prodTemplate.queryForList("select name form sysibm.systables where creator='admin');
//Core business logic to analyze those tables and proceed...
}else if {//preprod logic} else if{//staging logic}
И у меня есть много сложной функциональность, играющая вокруг данных из базы данных DB2 , Поскольку я вводя данные, источники данных относятся к моему dao с использованием Spring config; по какой-либо причине, если одна база данных/источник данных не работает, я не могу использовать мое приложение и получать nullpointer, поскольку один или несколько источников данных не работают.
Как я могу справиться с этими ошибками? В основном я хочу, чтобы мое приложение работало, если хотя бы один ds. И у меня около 50 баз данных, настроенных с использованием вышеприведенной конфигурации.
Я в значительной степени смущен и не понимаю, как решить эту проблему. Спасибо заранее, ребята ...
Можете ли вы дать мне образец кода для того же самого. Если я пишу пользовательский источник данных, и если нужно добавить поддержку для большего количества баз данных, это будет громоздким каждый раз, когда редактирование классов будет правильным? Является ли пружина каким-либо механизмом для работы с этим ящиком? – springpress
Вы знаете, что ваш пользовательский источник данных будет весенним. См. ApplicationContextAware. Возможно, вы можете придумать некоторые схемы именования для реальных источников данных, а затем в вашем источнике данных маршрутизации вы сделаете что-то вроде applicationContext.getBean() .... –
У меня есть я написал свой собственный источник данных только для переключения схемы с помощью TransactionAwareDataSourceProxy, но в некоторых случаях мне нужны две или несколько разных баз данных для выполнения некоторой логики. Получайте метаданные из одной базы данных и проверяйте значения в другом db. В этом случае я не смогу использовать решение RoutingDataSource. Thaks – springpress