數據庫連接池

數據庫連接池

數據庫連接池是什麼,有什麼用?

連接池:就是創建一個容器,用於裝入多個Connection對象,在使用連接對象時,從容器中獲取一個Connection,使用完成後,在將這個Connection重新裝入到容器中。這個容器就是連接池。(DataSource)
也叫做數據源.

我們可以通過連接池獲取連接對象.

優點:
節省創建連接與釋放連接 性能消耗 ---- 連接池中連接起到複用的作用 ,提高程序性能

自定義連接池

  1. 創建一個MyDataSource類,在這個類中創建一個LinkedList
  2. 在其構造方法中初始化List集合,並向其中裝入5個Connection對象。
  3. 創建一個public Connection getConnection();從List集合中獲取一個連接對象返回.
  4. 創建一個 public void readd(Connection) 這個方法是將使用完成後的Connection對象重新裝入到List集合中.

代碼問題:

  1. 連接池的創建是有標準的.
    在javax.sql包下定義了一個接口 DataSource
    簡單說,所有的連接池必須實現javax.sql.DataSource接口,
    我們的自定義連接池必須實現DataSource接口。
  2. 我們操作時,要使用標準,怎樣可以讓 con.close()它不是銷燬,而是將其重新裝入到連接池.
    要解決這個問題,其本質就是將Connection中的close()方法的行爲改變。
    怎樣可以改變一個方法的行爲(對方法功能進行增強)
    1.繼承
    2.裝飾模式
    a.裝飾類與被裝飾類要實現同一個接口或繼承同一個父類
    b.在裝飾類中持有一個被裝飾類引用
    c.對方法進行功能增強。
    3.動態代理
    可以對行爲增強
    Proxy.newProxyInstance(ClassLoacer ,Class[],InvocationHandler);
  3. 結論:Connection對象如果是從連接池中獲取到的,那麼它的close方法的行爲已經改變了,不在是銷燬,而是重新裝入到連接池。

1.連接池必須實現javax.sql.DataSource接口。
2.要通過連接池獲取連接對象 DataSource接口中有一個 getConnection方法.
3.將Connection重新裝入到連接池 使用Connection的close()方法。

開源連接池

dbcp(瞭解)

  1. dbcp是apache的一個開源連接池。
    要想使用DBCP連接池,要下載jar包
    導入時要導入兩個
    commons-dbcp-1.4.jar
    commons-pool-1.5.6.jar
  2. 關於dbcp連接池使用
    1.手動配置(手動編碼)
	BasicDataSource bds = new BasicDataSource();
	// 需要設置連接數據庫最基本四個條件
	bds.setDriverClassName("com.mysql.jdbc.Driver");
	bds.setUrl("jdbc:mysql:///jdbc");
	bds.setUsername("root");
	bds.setPassword("abc");
	// 得到一個Connection
	Connection con = bds.getConnection();

2.自動配置(使用配置文件)

	Properties props = new Properties();
	FileInputStream fis = new FileInputStream("D:\\java1110\\workspace\\jdbc\\src\\dbcp.properties");
	props.load(fis);
	DataSource ds = BasicDataSourceFactory.createDataSource(props);

c3p0(必會)

  1. C3P0是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規範和JDBC2的標準擴展。
    目前使用它的開源項目有Hibernate,Spring等。
  2. c3p0與dbcp區別
    dbcp沒有自動回收空閒連接的功能
    c3p0有自動回收空閒連接功能
  3. c3p0連接池使用
    1.導包
    c3p0-0.9.1.2.jar
    2.使用
    1.手動
	ComboPooledDataSource cpds = new ComboPooledDataSource();
	cpds.setDriverClass("com.mysql.jdbc.Driver");
	cpds.setJdbcUrl("jdbc:mysql:///jdbc");
	cpds.setUser("root");
	cpds.setPassword("abc");

2.自動(使用配置文件)
c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql:///jdbc</property>
		<property name="user">root</property>
		<property name="password">abc</property>
	</default-config>

</c3p0-config>

c3p0的配置文件可以是properties也可以是xml.
c3p0的配置文件如果名稱叫做 c3p0.properties or c3p0-config.xml 並且放置在classpath路徑下(對於web應用就是classes目錄)
那麼c3p0會自動查找。
注意:我們其時只需要將配置文件放置在src下就可以。
使用:
ComboPooledDataSource cpds = new ComboPooledDataSource();
它會在指定的目錄下查找指定名稱的配置文件,並將其中內容加載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章