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

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

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

```xml: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で実装しています。

```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便利ツール@ツールタロウ](http://tool-taro.com/)