1. 程式人生 > 其它 >Javaweb專案配置連線池

Javaweb專案配置連線池

Javaweb專案配置連線池

我這裡以druid資料連線池作為案例,其他的連線池也差不多

1.首先去maven倉庫下載 druidlog4j 的jar包,新增到專案的WEB-INF目錄下的lib包中並手動右鍵點選新增到庫

2.進入自己的 Tomcat的conf目錄下的context.xml和web.xml 進行如下配置:

context.xml配置如下:

    <!-- 使用阿里巴巴的DruidDataSource配置針對Oracle資料庫的JNDI資料來源 -->
    <Resource
    name="jdbc/OracleDataSource"
    factory="com.alibaba.druid.pool.DruidDataSourceFactory"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:@localhost:1521:xe"
    username="JH"
    password="123456"
    maxActive="50"
    maxWait="10000"
    removeabandoned="true"
    removeabandonedtimeout="60"
    logabandoned="false"
    filters="stat"/>

web.xml配置如下:

    <!-- druid監控配置 -->
    <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
        <init-param>
        <!-- 允許清空統計資料 -->
        <param-name>resetEnable</param-name>
        <param-value>true</param-value>
        </init-param>
        <init-param>
        <!-- 使用者名稱 -->
        <param-name>loginUsername</param-name>
        <param-value>admin</param-value>
        </init-param>
        <init-param>
        <!-- 密碼 -->
        <param-name>loginPassword</param-name>
        <param-value>123456</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>

3.進入自己的web專案下找到 WEB-INF目錄下的web.xml 進行配置:

   <!--
     JNDI配置的資源引用:
     res-ref-name:表示引用資源的名稱,和前面tomcat連線池配置那保持一致
     res-type:此資源對應的型別為javax.sql.DataSource
     res-auth:容器授權管理
     -->
     
    <resource-ref>
        <description>Oracle DB Connection</description>
        <res-ref-name>jdbc/OracleDataSource</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

4.編寫連線池工具類

import com.alibaba.druid.pool.DruidDataSource;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @author JH_Y
 * @version 1.0
 * 從JNDI容器中獲取DataSource,再通過DataSource獲取資料庫連線
 */
public class ConnectPoolUtil {

    /*
     web.xml檔案中的JNDI資料來源引用配置
     <resource-ref>
          <description>Oracle DB Connection</description>
          <res-ref-name>jdbc/OracleDataSource</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
     </resource-ref>
    */


   /**
     * Oracle資料庫配置的JNDI資料來源連線名,後面跟的是DataSource名,
     DataSource名在web.xml檔案中的<res-ref-name></res-ref-name>進行了配置
     */
    private static final String ORACLE_DB_JNDINAME = "java:comp/env/jdbc/OracleDataSource";

    private static DruidDataSource dsOracle = null;

    static{
        try {
            //1、初始化名稱查詢上下文
            Context ctx = new InitialContext();
            //2、通過JNDI名稱找到DataSource
            dsOracle = (DruidDataSource) ctx.lookup(ORACLE_DB_JNDINAME);
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }

    /**
     * Description: 獲取Oracle資料庫連線
     */
    public static Connection getOracleConnection() throws SQLException {
        return dsOracle.getConnection();
    }


    /**
     * 要釋放的資源包括Connection資料庫連線物件,負責執行SQL命令的Statement物件,儲存查詢結果的ResultSet物件
     */
    public static void release(ResultSet rs,  Statement st,Connection conn){
        if(rs!=null){
            try{
                rs.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
            rs = null;
        }
        if(st!=null){
            try{
                st.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }

        if(conn!=null){
            try{
                conn.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void release(Statement st,Connection conn){
       release(null,st,conn);
    }


}

附帶提一下:

在用JNDI連線資料庫時用main函式測試時總報錯,是因為 InitialContext 是要在應用伺服器的上下文裡才有的。所以不能用main函式直接測試,只能放到tomcat或者servlet、jsp進行測試。