当数据库密码更改时,Java BasicDataSource如何创建与数据库的新连接?

时间:2017-08-04 15:19:49

标签: java database-connection datasource connection-pooling apache-commons-dbcp

我目前正在解决一个问题,即我有一个正在运行的Java 6应用程序,首次启动时会创建一个BasicDataSource,它在首次创建时会存储创建连接所需的所有必要信息。像这样的数据库:

DS.setUserName(username);
DS.setPassword(password);
DS.setUrl(url);
DS.setMinIdle(minIdle);
.
.
.

然后使用set属性创建与数据库的连接池。然后BasicDataSource存储在Map中,然后每次需要时都返回到调用方法,如下所示:

if (dataSources.contains(databaseDS)) {
    return dataSources.get(databaseDS.getConnection());
}

我的理解是BasicDataSource的连接池与数据库有实时连接,不需要使用密码登录数据库,而是连接已经有了与数据库建立的会话。这些连接将返回给调用方法,该方法不需要重新验证数据库。

但是,当更新数据库密码并且需要/生成新连接时,BasicDataSource如何创建该连接?它是否尝试使用存储在BasicDataSource中的密码对数据库进行身份验证以获取新连接?

谢谢

1 个答案:

答案 0 :(得分:0)

所以最后,我最终决定同步从池中拉出连接。当我们没有连接并且BasicDataSource需要再次为新连接进行身份验证时,我们将创建一个到数据库的新连接。但是,当密码更改后,我们会向数据库收到身份验证错误,然后我会从BasicDataSource Map中删除DataSource。然后,我使用新密码创建一个新的BasicDataSource

同步的原因(如果这没有任何意义可以让某些人感觉到我?)是因为对数据库的失败认证只发生一次,所以我们不会试图打击数据库太多次密码错误。之前的连接将变得陈旧并最终被清理,然后对象应该被垃圾收集。