Tomcat でコネクションプール
Tomcat のコネクションプールは Commons-dbcp と Commons-pool によって実現されています。jar は
CATALINA_HOME/common/lib にあります。
設定は CATALINA_HOME/conf/server.xml で行います。
Oracle の場合の XML の設定例と Java のソース記述例を書きます。
server.xml 記述例(5.0まで)
<Context path="/test" reloadable="false" docBase="test.war" autoDeploy="true">
<Resource name="jdbc/oracle" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/oracle">
<parameter>
<name>username</name>
<value>test</value>
</parameter>
<parameter>
<name>password</name>
<value>test-password</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@l27.0.0.1:1521:TEST</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
</ResourceParams>
</Context>
※Tomcat の 5.5 より設定方法が変更になりました。
server.xml 記述例(5.5以降)
<Context path="/test" reloadable="false" docBase="test.war" autoDeploy="true">
<Resource
name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:TEST"
username="test"
password="test-password"
/>
</Context>
Java 記述例
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");
Connection conn = ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
}
取得した Connection,Statement,ResultSet は確実に close しなければ行けません。
close しないとリークとなり、再利用されなくなります。
この問題を回避するには以下の記述を追加すると、放置された Connection を再度有効にしてくれます。
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
|