我遇到了以下问题。 2 dbs有2个数据源:current(A)和Stand(B)。如果A没有响应,我会尝试连接B.
这就是我的表现。
数据源是Spring bean。所以我在飞行中更改了Spring bean属性。这可以吗?看一下代码:
@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();
}
}
我可以看到,我的代码有效,但我不知道它是否采用了良好的方法。
答案 0 :(得分:2)
答案 1 :(得分:2)
如果您的数据源是池,那么它们将有一个等待使用或重新使用的连接池。根据您的汇集策略,您的代码可能无效,因为您没有告诉数据源驱逐使用旧URL的现有池连接。
总的来说,我建议您使用AbstractRoutingDataSource安全地交换数据源。见这里
How to make safe frequent DataSource switches for AbstractRoutingDataSource?