Java

Java Tomcatなどのアプリケーションサーバ+DBコネクションプール設定例

はじめに

普段、複数の種類のDBでテストすることが多いので、
アプリケーションサーバ(当方の環境ではTomcat)のcontext.xmlには
接続する可能性のあるすべてのDBの記述をずらっと書いています。

実装例

環境依存による違いは大いにあると思いますが、ご参考になれば…。
DB2はほとんど使わないので、実用に堪えうるかは?です。

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/コンテキストパス">
	<!-- MySQL -->
	<Resource name="jdbc/MySQL" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="20" maxWait="-1" username="ユーザ名" password="パスワード" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://ホスト名:3306/データベース名?zeroDateTimeBehavior=convertToNull" validationQuery="SELECT 0" />

	<!-- Oracle -->
	<Resource name="jdbc/Oracle" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="20" maxWait="-1" username="ユーザ名" password="パスワード" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ホスト名)(PORT=1521))(LOAD_BALANCE=YES)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=サービス名)))" validationQuery="SELECT 0 FROM DUAL" />

	<!-- PostgreSQL -->
	<Resource name="jdbc/PostgreSQL" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="20" maxWait="-1" username="ユーザ名" password="パスワード" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://ホスト名:5432/データベース名" validationQuery="SELECT 0" />

	<!-- SQLServer -->
	<Resource name="jdbc/SQLServer" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="20" maxWait="-1" username="ユーザ名" password="パスワード" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://ホスト名:1433;databaseName=データベース名" validationQuery="SELECT 0" />

	<!-- DB2 -->
	<Resource name="jdbc/DB2" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="20" maxWait="-1" username="ユーザ名" password="パスワード" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://ホスト名:50000/データベース名:currentSchema=スキーマ名(例: db2admin);" validationQuery="SELECT 0 FROM SYSIBM.DUAL" />
</Context>

サンプルでは、動作確認しやすいようにjspで実装しています。

connection_test.jsp

<%-- 
    Author     : tool-taro.com
--%>

<%@page import="javax.sql.DataSource"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.naming.InitialContext"%>
<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<%
        //コネクションを取得するjndi
        String jndi = "java:comp/env/jdbc/MySQL";
        //String jndi = "java:comp/env/jdbc/Oracle"; //←Oracleの場合

        InitialContext context = null;
        Connection connection = null;

        //コネクション取得処理
        String result = null;
        try {
                context = new InitialContext();
                DataSource dataSource = (DataSource) context.lookup(jndi);

                connection = dataSource.getConnection();
                //トランザクション分離レベルがDBによって異なるので設定を統一
                connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
                connection.setAutoCommit(false);
                result = connection.getMetaData().getDatabaseProductName();
        }
        finally {
                if (context != null) {
                        try {
                                context.close();
                        }
                        catch (Exception e) {
                        }
                }
                if (connection != null) {
                        try {
                                connection.close();
                        }
                        catch (Exception e) {
                        }
                }
        }
%>
<!DOCTYPE html>
<html>
    <head>
        <title>tool-taro.com</title>
    </head>
    <body>
        接続したDB="<%= result%>"
    </body>
</html>

動作確認

connection_test.jspの実行結果を見てみましょう。

接続したDB="MySQL" 

環境

  • 開発
    • Windows 10 Pro
    • JDK 1.8.0_74
    • NetBeans IDE 8.1
  • 動作検証
    • CentOS Linux release 7.2
    • JDK 1.8.0_74

Webツールも公開しています。
Web便利ツール@ツールタロウ

スポンサーリンク