Я работаю над webapp, где я вручную создаю свой DataSource. (также см. мой другой вопрос: How to use Spring to manage connection to multiple databases), потому что мне нужно подключиться к другим базам данных (dev, prod, qa, test).Java Datasource, как его распорядиться
Теперь я решил его выбрать и переключиться между базами данных. Но если пользователь выходит из моего приложения. Он хочет попытаться подключиться к другой базе данных. Он все еще подключен к одному источнику данных, потому что во время выполнения myDs не является нулевым. Как я могу правильно избавиться от этого источника данных, когда пользователь выходит из системы? Я не хочу, чтобы пользователь создавал источник данных каждый раз, когда он запрашивает базу данных.
private DataSource createDataSource(Environment e) {
OracleDataSource ds = null;
String url = null;
try {
if (myDs != null) {
logger.info("myDs connection: " + etmetaDs.getConnection().getMetaData().getURL());
url = myDs.getConnection().getMetaData().getURL();
}
} catch (SQLException exc) {
// TODO Auto-generated catch block
exc.printStackTrace();
}
if (myDs == null) {
try {
ds = new OracleDataSource();
} catch (SQLException ex) {
ex.printStackTrace();
}
ds.setDriverType("oracle.jdbc.OracleDriver");
ds.setURL(e.getUrl());
try {
Cryptographer c = new Cryptographer();
ds.setUser(c.decrypt(e.getUsername()));
ds.setPassword(c.decrypt(e.getPassword()));
} catch (CryptographyException ex) {
logger.error("Failed to connect to my environment [" + e.getName() + "]");
ex.printStackTrace();
return null;
}
logger.info("Connecting to my environment [" + e.getName() + "]");
myDs = ds;
} else if (url.equals(e.getUrl())) {
} else {
}
return myDs;
}
Вы пробовали использовать Singleton в качестве источника данных? – Crowlix