S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

排他制御のロックとコネクションの切断とコネクションプーリングと

ここでの検証がキッカケになって、排他制御のロックがかかりっぱなしになってる原因の、実際動いてるアプリケーションのコードの問題箇所が判ったよ。
気持ち的にはコネクションプーリングを使いたいので、参照するSelect文ではコネクションプーリングからコネクション取得してた。
もちろんcloseしてません。
で、DropTable(その後のCreateTable)は、そのテーブルのスキーマ(ユーザ)で接続するためにDriverManagerクラスからコネクションを取得してた。
なので、検証した時のコードと≒な動きでした。


コネクションプーリングから取得したコネクションを、アプリケーションでcloseするのって反則ですか???
それとも結構普通なんでしょうか???
Springの定義で、DataSourceに対してはdestroy-method="close"を設定してるけど、これってDataSouceが破棄されるときで、Connectionじゃねーよな???
今までそんなことしたことないので、そんなコードにする勇気がないですw
プーリング内部ではPing Queryってのでコネクションの状態を確認して、closeとかDBMS側から切断されてたらそのコネクションを破棄する?再接続する?みたいな動作してるようにも思うんだけど…
ってな感じでCosminexusのリソース参照から取得できるコネクションプーリングの動作が判んないので、参照するSelect文を実行する時もDriverManagerクラスからコネクションを取得して、実行後にcloseすることで解決としてみた。