LoginSignup
37
43

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-04

はじめに

普段、複数の種類のDBでテストすることが多いので、
アプリケーションサーバ(当方の環境ではTomcat8.5.20)の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" maxTotal="100" maxIdle="20" maxWaitMillis="-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" maxTotal="100" maxIdle="20" maxWaitMillis="-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" />

    <!-- SAP HANA -->
    <Resource name="jdbc/HANA" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="20" maxWaitMillis="-1" username="ユーザ名" password="パスワード" driverClassName="com.sap.db.jdbc.Driver" url="jdbc:sap://ホスト名:30013/?databaseName=データベース名&amp;autocommit=false" validationQuery="SELECT 0 FROM DUMMY" />

    <!-- PostgreSQL -->
    <Resource name="jdbc/PostgreSQL" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="20" maxWaitMillis="-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" maxTotal="100" maxIdle="20" maxWaitMillis="-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" maxTotal="100" maxIdle="20" maxWaitMillis="-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_144
    • NetBeans IDE 8.2
  • 動作検証

    • CentOS Linux release 7.4
    • JDK 1.8.0_144

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

37
43
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
43