Java BasicDataSource 如何在更改数据库密码时创建与数据库的新连接?
How does the Java BasicDataSource create new connections to a database when the database password is changed?
我目前正在解决我有一个 运行 Java 6 应用程序的问题,该应用程序在首次启动时会创建一个 BasicDataSource
,该应用程序在首次创建时会存储所有像这样创建与数据库的连接所需的必要信息:
DS.setUserName(username);
DS.setPassword(password);
DS.setUrl(url);
DS.setMinIdle(minIdle);
.
.
.
然后它使用设置的属性创建一个数据库连接池。 BasicDataSource
然后存储在 Map
中,然后在每次需要时返回给调用方法,如下所示:
if (dataSources.contains(databaseDS)) {
return dataSources.get(databaseDS.getConnection());
}
我的理解是 BasicDataSource
的连接池与数据库有实时连接,不需要使用密码登录数据库,而是该连接已经建立了一个会话数据库。这些连接将返回给不需要与数据库重新验证的调用方法。
但是,当更新数据库密码并且新连接是 needed/spawned 时,BasicDataSource
如何创建该连接?它是否尝试使用存储在 BasicDataSource
中的密码对数据库进行身份验证以获得新连接?
谢谢
所以最后,我最终决定同步从池中拉取连接。当我们没有连接并且 BasicDataSource
需要再次为新连接进行身份验证时,我们将创建一个新的数据库连接。但是,当密码已更改时,我们将收到数据库的身份验证错误,然后我将从 DataSource
的 Map
中删除 BasicDataSource
。之后,我用新密码创建一个新的 BasicDataSource
。
同步的原因(如果这没有意义,有人能给我一些意义吗?)是为了使对数据库的身份验证失败只发生一次,这样我们就不会最终尝试访问数据库太多次使用错误的密码。以前的连接将变得陈旧并最终被清理,然后对象应该被垃圾收集。
我目前正在解决我有一个 运行 Java 6 应用程序的问题,该应用程序在首次启动时会创建一个 BasicDataSource
,该应用程序在首次创建时会存储所有像这样创建与数据库的连接所需的必要信息:
DS.setUserName(username);
DS.setPassword(password);
DS.setUrl(url);
DS.setMinIdle(minIdle);
.
.
.
然后它使用设置的属性创建一个数据库连接池。 BasicDataSource
然后存储在 Map
中,然后在每次需要时返回给调用方法,如下所示:
if (dataSources.contains(databaseDS)) {
return dataSources.get(databaseDS.getConnection());
}
我的理解是 BasicDataSource
的连接池与数据库有实时连接,不需要使用密码登录数据库,而是该连接已经建立了一个会话数据库。这些连接将返回给不需要与数据库重新验证的调用方法。
但是,当更新数据库密码并且新连接是 needed/spawned 时,BasicDataSource
如何创建该连接?它是否尝试使用存储在 BasicDataSource
中的密码对数据库进行身份验证以获得新连接?
谢谢
所以最后,我最终决定同步从池中拉取连接。当我们没有连接并且 BasicDataSource
需要再次为新连接进行身份验证时,我们将创建一个新的数据库连接。但是,当密码已更改时,我们将收到数据库的身份验证错误,然后我将从 DataSource
的 Map
中删除 BasicDataSource
。之后,我用新密码创建一个新的 BasicDataSource
。
同步的原因(如果这没有意义,有人能给我一些意义吗?)是为了使对数据库的身份验证失败只发生一次,这样我们就不会最终尝试访问数据库太多次使用错误的密码。以前的连接将变得陈旧并最终被清理,然后对象应该被垃圾收集。