DBCPでloginTimeoutの設定の仕方

mabushiisign

データベースサーバをVMで稼働させている際、しばらくするとVMのリソース割り当てが下がってしまい、DBMSへの接続に時間がかかってしまい、Javaのバッチ処理がコネクションタイムアウトが発生しこけてしまう事態が発生しました。

Javaのバッチプログラムは、Spirng + Apache CommonsのDBCPを使用しています。
applicationContext.xmlには以下のような記述していました。

<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
     <property name="driverClassName"><value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value></property>
     <property name="url"><value>jdbc:sqlserver://192.168.0.12\sqlexpress:1433;databaseName=db;</value></property>
     <property name="username"><value>dbuser</value></property>
     <property name="password"><value>dbpass</value></property>
     <property name="initialSize"><value>10</value></property>
     <property name="maxIdle"><value>10</value></property>
     <property name="defaultAutoCommit"><value>True</value></property>
</bean>

この場合、タイムアウトはSQL Serverのデフォルトで15秒となります。
http://msdn.microsoft.com/ja-jp/library/ms378988.aspx

では、同じようにpropertyに loginTimeout を設定すると Exception が発生します。
BasicDataSourceのJavadocを参照すると、setLoginTimeoutにはBasicDataSource does NOT support this method.と記載されています。

ここで諦めかけたのですが、urlで指定すればいいのではないかと思い試したところ
無事に設定することができました。

    <property name="url"><value>jdbc:sqlserver://192.168.0.12\sqlexpress:1433;databaseName=db;loginTimeout=60;</value></property>

URLにプロパティで設定できることは、MSの以下のページにも記載されていました。
http://msdn.microsoft.com/ja-jp/library/ms378428(v=sql.105).aspx

最後に、SQL Serverの勉強にオススメの書籍を紹介します。

ブックオフオンライン楽天市場店
¥385 (2025/01/28 08:32時点 | 楽天市場調べ)
\楽天ポイント4倍セール!/
楽天市場
ABOUT ME
mabushiisign
mabushiisign
B'zとdoaとミスチルと登山が好きな40代のプログラマです。 普段は、SIer企業で働いています。
記事URLをコピーしました