【发布时间】:2018-01-12 14:29:36
【问题描述】:
我目前正在解决一个问题,即我有一个正在运行的 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 的连接池与数据库有实时连接,不需要使用密码登录数据库,而是该连接已经与数据库建立了会话。这些连接将返回给调用方法,不需要重新与数据库进行身份验证。
但是,当更新数据库密码并需要/产生新连接时,BasicDataSource 如何创建该连接?它是否尝试使用存储在BasicDataSource 中的密码对数据库进行身份验证以获取新连接?
谢谢
【问题讨论】:
-
您已将数据库凭据存储在某个地方并将它们传递给 BasicDataSource。如果数据库服务器端的凭据已更改,则需要在客户端应用程序中更改这些凭据。至少您必须使用新凭据重新启动您的应用程序。
-
@RobertMoskal 感谢您的快速回复。这是否意味着 BasicDataSource 在尝试生成与数据库的新连接时,将尝试发送旧密码并导致运行时异常,因为数据库将返回登录失败?
-
我编辑了我的原始帖子并添加了更多细节。我之前忘了提到密码存储在
BasicDataSource对象本身中
标签: java database-connection datasource connection-pooling apache-commons-dbcp