1. 連接池介紹
什么是連接池
數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池正是針對這個問題提出來的。數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而不是再重新建立一個;釋放空閑時間超過最大空閑時間的數據庫連接來避免因為沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。
連接池的優點
節省創建連接與釋放連接性能消耗
連接池中連接起到復用的作用,提高程序性能
連接池的原理
連接池基本的思想是在系統初始化的時候,將數據庫連接作為對象存儲在內存中,當用戶需要訪問數據庫時,并非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。使用完畢后,用戶也并非將連接關閉,而是將連接放回連接池中,以供下一個請求訪問使用。而連接的建立、斷開都由連接池自身來管理。同時,還可以通過設置連接池的參數來控制連接池中的初始連接數、連接的上下限數以及每個連接的最大使用次數、最大空閑時間等等。也可以通過其自身的管理機制來監視數據庫連接的數量、使用情況等。
連接池的規定
javax.sql包下有一個 DataSource
所有的支持java的連接池都應該實現javax.sql.DataSource接口,在這個接口中提供了一個方法 getConnection()它就是獲取一個連接對象的。
如果連接對象Connection是通過連接池獲取的,當通過Connection對象調用close()方法時,不在是銷毀連接對象,而是將連接對象放回到連接池。
2. dbcp連接池
dbcp連接池介紹
DBCP 是 Apache 軟件基金組織下的開源連接池實現,使用DBCP數據源,應用程序應在系統中增加如下兩個 jar 文件:
commons-dbcp.jar:連接池的實現
commons-pool.jar:連接池實現的依賴庫
Tomcat 的連接池正是采用該連接池來實現的。該數據庫連接池既可以與應用服務器整合使用,也可由應用程序獨立使用.
dbcp連接池配置(代碼)
// 1.創建連接池對象
BasicDataSource ds = new BasicDataSource();
// 2.設置相關屬性
ds.setDriverClassName("com.MySQL.jdbc.Driver");
ds.setUrl("jdbc:mysql:///day14");
ds.setUsername("root");
ds.setPassWord("1234");
dbcp連接池配置(配置文件)
//1.加載配置信息
PRoperties props = new Properties();
props.load(new FileInputStream(properties配置文件路徑);
//properties文件內容
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day14
username=root
password=1234
// 2.通過BasicDataSourceFactory獲取一個連接池對象
DataSource ds = BasicDataSourceFactory.createDataSource(props);
3. c3p0連接池
c3p0連接池介紹
C3P0是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規范和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。
c3p0與dbcp區別
dbcp沒有自動回收空閑連接的功能
c3p0有自動回收空閑連接功能
在使用c3p0連接池時將c3p0的jar 復制WEB-INF/lib下,我們使用的版本
c3p0-0.9.1.2.jar
c3p0連接池配置(代碼)
//1.創建連接池對象
ComboPooledDataSource ds = new ComboPooledDataSource();
// 2.手動配置參數
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql:///day14");
ds.setUser("root");
ds.setPassword("1234");
c3p0連接池配置(配置文件)
只要在src下創建c3p0.properties 或者 c3p0-config.xml名稱的配置文件,c3p0會自動查找.
ComboPooledDataSource ds = new ComboPooledDataSource();
自動查找配置文件
在src/c3p0-config.xml
<c3p0-config><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql:///day14</property><property name="user">root</property><property name="password">1234</property></default-config></c3p0-config>或者在src/c3p0.properties
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/day07c3p0.driverClass=com.mysql.jdbc.Driverc3p0.user=rootc3p0.password=12344. tomcat內置連接池
tomcat內置連接池介紹
我們在web開發中,可以將鏈接池交給服務器管理,如果需要時,就可以直接從服務器中獲取連接對象。在tomcat中提供了一個context.xml文件,我們可以將連接池配置在這個文件中,詳細信息大家可以查看tomcat幫助文檔
context.xml文件可以放置在三個位置:
1.tomcat/conf下 這個配置是被服務器下所有應用所使用的.
2.tomcat/Catalina/xxx目錄下,這個配置被某一個虛擬主機使用
3.在web工程的META-INF目錄下創建一個context.xml文件,它是被當前工程所使用
JNDI介紹
JNDI(Java Naming and Directory Interface,Java命名和目錄接口)是SUN公司提供的一種標準的Java命名系統接口,JNDI提供統一的客戶端API,通過不同的訪問提供者接口JNDI服務供應接口(SPI)的實現,由管理者將JNDI API映射為特定的命名服務和目錄系統,使得Java應用程序可以和這些命名服務和目錄服務之間進行交互。目錄服務是命名服務的一種自然擴展
配置tomcat內置連接池
<Context><Resource name="jdbc/abc" auth="Container"type="javax.sql.DataSource" username="root" password="1234"driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql:///day14"maxActive="8" maxIdle="4"/></Context>獲取連接的方法:
Context context = new InitialContext(); // 初始化上下文對象
Context envCtx = (Context) context.lookup("java:comp/env"); // 固定寫法
DataSource ds = (DataSource) envCtx.lookup("jdbc/abc");// 通過綁定名稱,查找指定java對象
新聞熱點
疑難解答