0

私は最初に起動したときに、最初に作成されたときに、データベースへの接続を作成するために必要なすべての情報を格納するJava 6アプリケーションを実行している問題を解決しています:データベースのパスワードが変更された場合、Java BasicDataSourceはデータベースへの新しい接続をどのように作成しますか?

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

次に、setプロパティを使用してデータベースへの接続のプールを作成します。

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

私の理解では、BasicDataSourceの接続プールは、データベースドンへのライブ接続を持っている "ということです:BasicDataSourceはその後、その後、呼び出し元のメソッドにそれはそうのように必要とされるたびに返されMapに保存されていますパスワードを使用してデータベースにログインする必要がありますが、接続にはすでにデータベースとのセッションが確立されています。これらの接続は、データベースとの再認証を必要としない呼び出しメソッドに返されます。

ただし、データベースのパスワードが更新され、新しい接続が必要/生成されると、BasicDataSourceはどのようにその接続を作成しますか?新しい接続を取得するために、BasicDataSourceに保存されているパスワードを使用してデータベースで認証しようとしていますか?

は最後にそうあなた

+0

データベース資格情報をどこかに保存し、BasicDataSourceに渡しました。資格情報がデータベースサーバー側で変更されている場合は、クライアントアプリケーションの資格情報を変更する必要があります。少なくとも、新しい資格情報でアプリケーションを再起動する必要があります。 –

+0

@RobertMoskalはすばやく返信してくれてありがとう。これは、BasicDataSourceがデータベースへの新しい接続を開始しようとしているときに、古いパスワードを送信しようとし、データベースがログイン失敗を返すのでランタイム例外を引き起こすことを意味しますか? – Mark

+0

オリジナルの投稿を編集し、さらに詳細を追加しました。以前は、パスワードが 'BasicDataSource'オブジェクト自体に格納されていることを忘れていました – Mark

答えて

0

をありがとう、私は、プールからの接続の引き上げを同期する上で決めることになりました。接続が切断され、新しい接続のためにBasicDataSourceを再度認証する必要がある場合は、データベースへの新しい接続を作成します。パスワードが変更された場合、データベースに認証エラーが発生し、MapのをDataSourceにドロップします。その後、新しいパスワードで新しいBasicDataSourceを作成します。

同期の理由(これが意味をなさないのであれば、誰かが私の中に何かを感じることができますか?)は、データベースへの失敗認証が一度しか起こらないため、データベースをあまりにも多くの回数間違ったパスワード。以前の接続は古くなり、最終的にはオブジェクトがガベージコレクションされるようにクリーンアップされます。

関連する問題