tomcat7連接池使用

jopen 9年前發布 | 36K 次閱讀 數據庫連接池 Tomcat7

一直糾結于數據庫連接池的實現,今天終于擠出時間來實現一下。tomcat之前連接池使用dbcp實現,dbcp有很多的缺點,現在的tomcat采用了自己實現的線程池,用起來還是非常的簡單方面的。整體操作如下:


   1 配置連接池

   將以下內容保存為context.xml,放在web項目下的META-INF文件夾下:

    <?xml version="1.0" encoding="UTF-8"?>  
    <!DOCTYPE xml>  
    <Context>  
        <Resource name="jdbc/test"   
            auth="Container"   
            type="javax.sql.DataSource"  
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"   
            maxActive="100" //最大激活連接  
            maxIdle="30"   //最大空閑連接  
            maxWait="1000"  //最大等待數  
            username="test"  //數據庫用戶名  
            password="testtest" //數據庫密碼  
            driverClassName="com.mysql.jdbc.Driver" //此處使用mysql數據庫,請自行修改驅動  
            url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" />   //test為數據庫名,編碼為UTF-8  
    </Context>  

 2 代碼中引用連接池

    package com.hrb2c.servlet;

import java.io.IOException;  
import java.io.PrintWriter;  
import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.util.concurrent.Future;  

import javax.naming.Context;  
import javax.naming.InitialContext;  
import javax.naming.NamingException;  
import javax.servlet.ServletException;  
import javax.servlet.annotation.WebServlet;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  

import org.apache.tomcat.jdbc.pool.DataSource;  

/** 
 * 數據庫連接池 
 *  
 * @author Yuedong Li 
 *  
 */  

@WebServlet("/ConnPoolTest")  
public class ConnPoolTest extends HttpServlet {  
    private static final long serialVersionUID = 1L;  
    private Connection con = null;  
    private static DataSource datasource;  

    /** 
     * @see HttpServlet#HttpServlet() 
     */  
    public ConnPoolTest() {  
        super();  
        try {  
            //獲取數據源  
            datasource = getInstance();  

            //連接池同步  
            Future<Connection> future = datasource.getConnectionAsync();  
            while (!future.isDone()) {  
                // 等待連接池同步  
                Thread.sleep(100);  
            }  

            // 獲取連接池  
            con = future.get();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  

    }  

    /** 
     * 單例模式獲取數據源 
     * @return 
     * @throws NamingException 
     */  
    private DataSource getInstance() throws NamingException {  
        if (datasource == null) {  
            Context initContext = new InitialContext();  
            Context envContext = (Context) initContext.lookup("java:/comp/env");  
            datasource = (DataSource) envContext.lookup("jdbc/test");  
        }  
        return datasource;  
    }  


    /** 
     * 處理get方法 
     */  
    protected void doGet(HttpServletRequest request,  
            HttpServletResponse response) throws ServletException, IOException {  
        doPost(request, response);  
    }  

    /** 
     * 處理post方法 
     */  
    protected void doPost(HttpServletRequest request,  
            HttpServletResponse response) throws ServletException, IOException {  
        Statement st;  
        StringBuffer buff = new StringBuffer("<html><body>");  
        try {  
            if (con != null) {  
                //簡單查詢,test表中有2列,id與name  
                buff.append("id");  
                buff.append("  ");  
                buff.append("name");  
                buff.append("<br>");  
                st = con.createStatement();  
                ResultSet rs = st.executeQuery("select * from test");  
                while (rs.next()) {  
                    buff.append(rs.getString("id"));  
                    buff.append("  ");  
                    buff.append(rs.getString("name"));  
                    buff.append("<br>");  
                }  
            }  
            buff.append("</body></html>");  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
        PrintWriter out = response.getWriter();  
        out.write(buff.toString());  
    }  

}  </pre><br />

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!