mysql数据库连接池_MySql数据库连接池
1.傳統鏈接(如下為示意圖)
注意:
(1).傳統方式找DriverManager要連接,數目是有限的。
(2).傳統方式的close(),并沒有將Connection重用,只是切斷應用程序和數據庫的橋梁,即無發送到SQL命令到數據庫端執行
(3).項目中,對于Connection不說,不會直接使用DriverManager取得,而使用連接池方式。
2.采用連接池(示意圖)
3.開源數據庫連接池
(1).現在很多Web服務器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的實現,即連接池的實現。通常我們把DataSource的實現,按其英文含義稱之為數據源,數據源中都包含了數據庫連接池的實現。
(2).也有一些開源組織提供了數據源的獨立實現:
DBCP 數據庫連接池(tomcat)
C3P0 數據庫連接池(hibernate)
(3).實際應用時不需要編寫連接數據庫代碼,直接從數據源獲得數據庫的連接。程序員編程時也應盡量使用這些數據源的實現,以提升程序的數據庫訪問性能。
4.C3P0的使用:
(1).在classpath的路徑下配置xml文件,即src的文件下而且這個文件名必須是c3p0-config.xml
原始的c3p0-config.xml的文件參數:
3
30
1000
false
Test
false
100
null
false
60
3
60
15
100
3
root
password
select id from test where id=1
300
false
true
root
false
con_test
30000
30
10
30
25
10
0
200
300
實戰練習:
1>.首先配置c3p0-config.xml文件
com.mysql.jdbc.Driver
root
wwh
jdbc:mysql://127.0.0.1:3306/jdbctest
2>.代碼操作連接(TestC3P0.java)
package cn.wwh.www.java.jdbc.datasource;
import java.sql.Connection;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
*類的作用:
*
*
*@author 一葉扁舟
*@version 1.0
*@創建時間: 2014-9-2 上午12:02:13
*/
//測試連接池C3P0的用法
public class TestC3P0 {
public static void main(String[] args) throws Exception {
long begin = System.currentTimeMillis();
//創建C3P0連接池,并加載c3p0-config.xml文件
ComboPooledDataSource dataSource = new ComboPooledDataSource();
for(int i=1;i<=1000000;i++){
Connection conn = dataSource.getConnection();
if(conn!=null){
System.out.println("獲取連接第"+i+"個");
conn.close();
}
}
long end = System.currentTimeMillis();
System.out.println("用了" + (end-begin)/1000+"秒");
}
}
5.DBCP的使用:
(1).采用類加載的方式,文件名是:dbcp.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/jdbctest
username=root
password=wwh
(2).在代碼中使用(TestDBCP.java)
package cn.wwh.www.java.jdbc.datasource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/**
*類的作用:采用DBCP連接池的方式去獲取數據庫的鏈接,并測試他的時間
*
*
*@author 一葉扁舟
*@version 1.0
*@創建時間: 2014-9-1 下午09:27:59
*/
//測試連接池DBCP的用法
public class TestDBCP {
public static void main(String[] args) throws Exception {
long begin = System.currentTimeMillis();
//加載屬性文件
InputStream is = TestDBCP.class.getClassLoader().getResourceAsStream("cn/wwh/www/java/jdbc/config/dbcp.properties");
Properties props = new Properties();
props.load(is);
//創建DBCP連接池工廠
BasicDataSourceFactory factory = new BasicDataSourceFactory();
//創建數據源,即連接池
DataSource ds = factory.createDataSource(props);
for(int i=1;i<=1000000;i++){
//從連接池中取得一個空閑的連接對象
Connection conn = ds.getConnection();
if(conn!=null){
System.out.println("獲取連接第"+i+"個");
}
//將連接對象還回給連接池
conn.close();
}
long end = System.currentTimeMillis();
System.out.println("用了" + (end-begin)/1000+"秒");
}
}
第一的測試時間為18秒,第二個的測試時間為13秒,不同的機器性能不一樣,測試的時間快慢也不可能。但是理論上C3P0的速度應該更快,但是我測試的數據卻恰恰相反,很是奇怪。
總結:
1>DBCP和C3P0,都是Java開源的,都必須直接或間接實現javax.sql.DataSource接口
2>DBCP連接池需要dbcp.properties文件,同時需加入3個對應的jar包
3>C3P0連接池需要在/WEB-INF/classes/目錄下存放c3p0-config.xml文件,該類ComboPooledDataSource在創建時
會自動在指定的目錄下找xml文件,并加載默認設置
4>tomcat用的也是c3p0
6.導入的jar包
commons-dbcp.jar:DBCP實現要導入的jar
commons-pool.jar: 連接池實現的依賴類
commons-collections.jar :連接池實現的集合類
c3p0-0.9.1.2.jar :C3P0實現要導入的jar包
總結
以上是生活随笔為你收集整理的mysql数据库连接池_MySql数据库连接池的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标签的for循环和if_SO面试题08:
- 下一篇: mysql创建表时显示错误_MYSQL创