У меня есть следующая проблема. Есть 2 источника данных для 2 dbs: current (A) и stand by (B). Если A не отвечает, я попытаюсь подключить B.Изменение свойств пружинных компонентов на лету
Вот как я это понимаю.
- перехватчик проверяет соединение является плохим
- перехватчик будет поменять URL источника данных, если что-то идет неправильно
Источников данных являются пружинными бобами. Поэтому я изменяю свойства весеннего компонента на лету. Это нормально? Посмотрите на код:
@Autowired
@Qualifier("dataSourceMain")
private oracle.jdbc.pool.OracleDataSource dsMain;
@Autowired
@Qualifier("dataSourceStandBy")
private oracle.jdbc.pool.OracleDataSource dsStandBy;
public void swapURL() {
try {
String dsMainURL = dsMain.getURL();
dsMain.setURL(dsStandBy.getURL());
dsStandBy.setURL(dsMainURL);
} catch (Exception e) {
e.printStackTrace();
}
}
Как я могу видеть, мой код работает, но я не знаю, если это хороший подход или нет.
ИМХО вы не должны этого хака, как это должно быть что-то обеспечивается драйвером JDBC и/или пул соединений используется. –
Это источник данных, который объединяет пул, URL-адрес будет работать только для вновь созданных подключений. Уже имеющееся соединение по-прежнему указывает на старый URL-адрес, пока все они не будут оставлены. Вы используете oracle, поэтому я предлагаю настроить надлежащий переход на другой ресурс и использовать Spring Data JDBC для настройки этой ситуации восстановления после отказа, вместо того, чтобы переводить свои собственные. –
Согласовано - драйвер MySQL jdbc, например, позволяет вам добавлять в список URL-адреса базы данных, которые доступны при циклическом обращении при попытке получить соединение. Я не уверен, что Oracle предоставляет это в своем драйвере jdbc. – PaulNUK