DBCP は Apache Jakarta プロジェクト下で開発されているコネクションプールを管理してくれるライブラリです。
・Jakarta Commons DBCP
Tomcat にも組み込まれていて、context.xml のコネクションプールの設定項目はまさに DBCP のものと一緒です。
一時期sandboxに遺棄されていた気がしますが、今はかろうじてメンテナンスされているようです。
で、今回仕事でコンテナなしに、JUnit 内とかからでも手軽にコネクションプールを扱いたかったので触ってみました。
といっても、シンプルなもので、API ドキュメントも見ずに IDEのコード補完だけで使うことが出来ました。
キモは BasicDataSourceFactory に Properties を渡すことだけ。
これで DataSource のインスタンスが得られます。
Properties props = new Properties();
props.load(DBUtil.class.getResourceAsStream("/dbcp.properties"));
DataSource ds = BasicDataSourceFactory.createDataSource(props);
createDataSource() は throws Exception と定義されているのが個人的にはちょっと気持悪いです。
dbcp.properties の内容はこんな感じ
maxActive=100
maxIdle=30
maxWait=10000
username=user
password=password
validationQuery=select count(*) from なんかテーブル
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=UTF8&autoReconnect=true
autoReconnect=true と validationQuery を設定しておかないとしばらく放置してから動かしたとき、コネクションが切れてるよと SQLException が発生します。
あちこちでコネクションを引き回したくないので、同一スレッド内から呼び出した場合は同じコネクションが使われることを保証する、WebLogic で言うところの pinned-to-thread的な機能がないか探しましたが、残念ながらそのような設定項目はないようです。
#ソースコードは未確認