我目前正在研究一个运行Java 6应用程序的问题,当第一次启动时,会创建一个BasicDataSource
,它在第一次创建时会存储创建到数据库的连接所需的所有必要信息,如下所示:当数据库密码更改时,Java 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
的连接池具有对数据库不要活连接“ t要求使用密码登录到数据库,而是该连接已经建立了与数据库建立的会话。这些连接将返回到调用方法,不需要使用数据库重新进行身份验证。
但是,当数据库密码更新并且需要/产生新连接时,BasicDataSource
如何创建该连接?它是否尝试使用存储在BasicDataSource
中的密码进行数据库验证以获得新连接?
谢谢
您已将数据库凭据存储在某处并将它们传递给BasicDataSource。如果数据库服务器端的凭证已更改,则需要更改客户端应用程序中的凭证。至少你必须用新的证书重新启动你的应用程序。 –
@RobertMoskal感谢您的快速回复。这是否意味着BasicDataSource在尝试产生新的数据库连接时会尝试发送旧密码并导致运行时异常,因为数据库将返回登录失败? – Mark
我编辑了我原来的帖子并添加了一些更多的细节。我之前忘记提到密码存储在'BasicDataSource'对象本身 – Mark