データベースサーバを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の勉強にオススメの書籍を紹介します。

SQL Server 2008の教科書―基礎から実践まで学べる
- 作者: 松本美穂,松本崇博
- 出版社/メーカー: ソシム
- 発売日: 2009/10
- メディア: 単行本
- 購入: 5人 クリック: 95回
- この商品を含むブログ (7件) を見る