javaweb使用 数据库连接池 DBCP,实现对数据库驱动使用优化,多个 action共用一个数据库连接
本文著重理解DBCP以及連接池基本運行原理(步驟)
首先我們要知道在連接數據庫時
如果頻繁的對數據庫進行連接,然后又將它釋放,對項目的訪問效率是一種絕對的降低,
因為在這個過程中,連接(校驗密碼用戶名)·與釋放(回收資源)需要1s左右,一旦許多action一起訪問,勢必對服務器有不小壓力
于是乎,數據庫連接池就出現了,
常見的兩種種為:
1.C3P0 數據庫連接池(可百度咨詢)
C3P0是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規范和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。C3P0數據源在項目開發中使用得比較多。
c3p0與dbcp區別
dbcp沒有自動回收空閑連接的功能
c3p0有自動回收空閑連接功能
2.DBCP 數據庫連接池(本文著重理解DBCP):
DBCP 是 Apache 軟件基金組織下的開源連接池實現,要使用DBCP數據源,需要應用程序應在系統中增加如下兩個 jar 文件:
Commons-dbcp.jar:連接池的實現
Commons-pool.jar:連接池實現的依賴庫
Tomcat 的連接池正是采用該連接池來實現的。該數據庫連接池既可以與應用服務器整合使用,也可由應用程序獨立使用。
本文著重理解DBCP
連接池基本運行步驟
(1) 程序初始化時創建一定數量(initialSize)連接池
(2) 使用時向連接池申請可用連接
(3) 使用完畢,將連接返還給連接池
(4) 程序退出時,斷開所有連接,并釋放資源
但我們將使用已經封裝好的 DBCP連接池
首先導入包:
Commons-dbcp.jar:連接池的實現
Commons-pool.jar:連接池實現的依賴庫
好,開始使用,
使用步驟如下:
1.配置自定義資源文件
config.properties
2.編寫一個類調用Commons-dbcp.jar,連接池的實現
config.properties配置:(具體參數具體修改)
(可以定義多個資源文件,并以此加載不同數據庫鏈接)
(重點:資源文件位于src目錄!!!!!!!!!)
編寫一個類調用Commons-dbcp.jar,連接池的實現
package com.dbcp;import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; /*** dbcp數據庫連接池 工具類* 優點:不重復連接數據庫等* https://www.cnblogs.com/xdp-gacl/p/4002804.html*/ /** * @ClassName: Jdbc_DBCP * @author joker */ public class Jdbc_DBCP {/*** 在java中,編寫數據庫連接池需實現java.sql.DataSource接口,每一種數據庫連接池都是DataSource接口的實現* DBCP連接池就是java.sql.DataSource接口的一個具體實現*/// 聲明一個BasicDataSource源,也就是驅動private static BasicDataSource ds = null;//在靜態代碼塊中創建數據庫連接池static{try {//加載properties配置文件InputStream in = Jdbc_DBCP.class.getClassLoader().getResourceAsStream("config.properties");Properties prop = new Properties();prop.load(in);//創建數據源ds = (BasicDataSource) BasicDataSourceFactory.createDataSource(prop);} catch (IOException e) {// TODO 自動生成的 catch 塊e.printStackTrace();} catch (Exception e) {// TODO 自動生成的 catch 塊e.printStackTrace();}}/*** @Description: 從數據源中獲取數據庫連接* @Anthor:joker* @return Connection* @throws SQLException*/ public static Connection getConnection() throws SQLException{//從數據源中獲取數據庫連接return ds.getConnection();}/*** @Method: release* @Description: 釋放資源,* 釋放資源* @Anthor:joker** @param conn* @param st* @param rs*/ public static void release(Connection conn,Statement st,ResultSet rs){if(rs!=null){try{//關閉存儲查詢結果的ResultSet對象rs.close();}catch (Exception e) {e.printStackTrace();}rs = null;}if(st!=null){try{//關閉負責執行SQL命令的Statement對象st.close();}catch (Exception e) {e.printStackTrace();}}if(conn!=null){try{//將Connection連接對象還給數據庫連接池conn.close();}catch (Exception e) {e.printStackTrace();}}} }剩余的就是調用了(關鍵代碼)
Connection co = Jdbc_DBCP.getConnection();PreparedStatement p = co.prepareStatement(sql);ResultSet result = p.executeQuery();Jdbc_DBCP.release(co, p,result);這就是數據庫連接池優點。
它用完了,關閉時會只關閉邏輯連接,位于服務器的物理連接仍然存在。(為什么,導入的包實現的功能,只要會用,當然可以寫,附上編寫關鍵實現)
連接池需實現java.sql.DataSource接口。DataSource接口中定義了兩個重載的getConnection方法:
Connection getConnection()
Connection getConnection(String username, String password)
當用戶使用完Connection,
調用Connection.close()方法時,Collection對象應保證將自己返回到LinkedList中,而不要把conn還給數據庫。
Collection保證將自己返回到LinkedList中是編程的難點。
總結
以上是生活随笔為你收集整理的javaweb使用 数据库连接池 DBCP,实现对数据库驱动使用优化,多个 action共用一个数据库连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于将struts2框架下,使自定义过滤
- 下一篇: javaweb利用struts2完成批量