JDBC数据源连接池(1)---DBCP
何為數據源呢?也就是數據的來源。我在前面的一篇文章《JDBC原生數據庫連接》中,采用了mysql數據庫,數據來源于mysql,那么mysql就是一種數據源。在實際工作中,除了mysql,往往還會有Oracle,sql server等數據庫。
在與數據源連接方面,我在《JDBC原生數據庫連接》中未采用連接池的方式,而是在需要使用數據源的時候開始建立連接,等到我們使用完之后,就會把個連接close(回收釋放銷毀),等到我們又需要連接數據庫時再建立連接,不斷循環重復。由于數據庫連接是比較耗時的操作,所以這種方式會造成效率下降。為此,我們引入數據源連接池的概念。在實際工作中,我們通常都是通過數據源連接池進行數據庫連接的。
連接池采用了連接管理復用的機制,我們可以在數據源連接池中初始化連接數量,最小空閑數量,最大空閑數量,最大連接數量,資源回收等。數據源連接池通常有DBCP連接池,C3P0連接池,Tomcat自帶的連接池機制,當然,我們也可以自己動手寫一個數據源連接池工具。
我們先來看DBCP連接池。這是Apache公司推出的一種數據源連接池,全稱為Database Connection Pool。我們接下來仍使用《JDBC原生數據庫連接》中的前端頁面與數據庫,看如何使用DBCP連接池。
首先,在Web項目的WebContent--->WEB-INF--->lib文件夾中添加分別以commons-dbcp和commons-pool起始的DBCP的兩個jar包。
其次,在Java Resources--->src中添加dbcpconfig.properties屬性配置文件,里面的內容為:
#連接設置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/itszt2
username=root
password=2017
#<!-- 初始化連接 -->
initialSize=10
#最大連接數量
maxActive=50
#<!-- 最大空閑連接 -->
maxIdle=20
#<!-- 最小空閑連接 -->
minIdle=5
#<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驅動建立連接時附帶的連接屬性屬性的格式必須為這樣:[屬性名=property;]
#注意:"user" 與 "password" 兩個屬性會被明確地傳遞,因此這里不需要包含他們。
connectionProperties=useUnicode=true&characterEncoding=utf8
#指定由連接池所創建的連接的自動提交(auto-commit)狀態。
defaultAutoCommit=true
#driver default 指定由連接池所創建的連接的事務級別(TransactionIsolation)。
#可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=REPEATABLE_READ
再次,編寫數據源連接池工具類。
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/*** DBCP數據源連接池* */
public abstract class Util_2_JDBC_DBCP {private static DataSource dataSource=null;//注冊mysql驅動static {//也可以采用ResourceBundle來解析與讀取屬性文件里的配置信息;我們在此采用Properties類加載屬性文件//如果是讀取的文件帶有“properties”后綴名,它會從工程根目錄下找;如果是到classes下則去掉后綴就可以了
// ResourceBundle bundle = ResourceBundle.getBundle("dbcpconfig");Properties properties=new Properties();InputStream resourceAsStream = Util_2_JDBC_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");try {properties.load(resourceAsStream);} catch (IOException e) {throw new RuntimeException("讀取屬性文件失敗!");}try {dataSource = BasicDataSourceFactory.createDataSource(properties);} catch (Exception e) {throw new RuntimeException("數據源連接池失敗!");}}/*** 打開與數據庫的連接* @return 一個連接對象*/public static Connection openConnection(){try {return dataSource.getConnection();} catch (SQLException e) {e.printStackTrace();}return null;}//釋放資源public static void release(Connection connection, Statement statement, ResultSet resultSet){if(connection!=null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}if (statement != null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}}
}
最后,我們在com.itszt.demo文件夾中的LoginServlet.java的Servlet文件中,將產生Connection對象的方式修改為DBCP連接池方式即可。
轉載于:https://www.cnblogs.com/lizhangyong/p/8117384.html
總結
以上是生活随笔為你收集整理的JDBC数据源连接池(1)---DBCP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摩尔庄园手游精灵怎么加点?
- 下一篇: eclipse 变成中文