4、資料庫連線池的概念及C3P0、Uruid兩種連線池的使用
目錄
1 為什麼要使用資料庫連線池
JDBC使用時,會建立資料庫連線Connection物件,使用完畢後,再將這個物件銷燬掉,而每次建立和銷燬資料庫連線物件都是需要耗費時間的,因此需要優化資料庫的連線過程,提高效率。
優化思路:程式初始化的時候,初始化多個連線,將多個連線放入到池(集合)中,每次獲取的時候,直接從連線池中獲取連線物件,使用結束後,將連線歸還到池中。
資料庫連線池思想如上圖所示:
(1)程式一開始就建立一定數量的連線,放在一個容器中,這個容器稱為連線池(相當於容器)。
(2)使用的時候直接從連線池中取一個已經建立好的連線物件。
(3)關閉的時候不是真正關閉連線,而是將連線物件再次放回到連線池中。
2 資料庫連線池的標準規範
Java為資料庫連線池提供了公共的介面:javax.sql.DataSource,各個廠商需要讓自己的連線池實現這個介面。這樣應用程式可以方便的切換不同廠商的連線池,而不必要修改大量程式碼。
常見的第三方連線池如下:
(1)DBCP(DataBase Connection Pool)資料庫連線池,是Apache上的一個Java連線池專案,也是Tomcat使用的連線池元件。dbcp沒有自動回收空閒連線的功能。
(2)C3P0是一個開源的JDBC連線池,它實現了資料來源和JNDI繫結,支援JDBC3規範和JDBC2的標準擴充套件。C3P0是非同步操作的,所以一些操作時間過長的JDBC通過其它的輔助執行緒完成。目前使用它的開源專案有Hibernate,Spring等。C3P0有自動回收空閒連線功能。
(3)阿里巴巴-德魯伊 Druid 連線池:Druid是阿里巴巴開源平臺上的一個專案,整個專案由資料庫連線池、外掛框架和SQL解析器組成。該專案主要是為了擴充套件JDBC的一些限制,可以讓程式設計師實現一些特殊的需求(效能好,常用)。
3 C3P0 連線池的使用
對開發人員來說,學習C3P0很簡單,就是從連線池中拿連線來使用而已。
使用步驟:
step1:匯入jar包
step2:編寫C3P0所要求的配置檔案。連線資料庫的4大資訊是必須的(千萬別寫在原始碼中,而是寫在配置檔案中,讀取配置檔案也不是我們自己讀了,而是C3P0來讀,於是這就對配置檔案有了要求)
C3P0對於配置檔案的要求:
(1)檔名稱 c3p0-config.xml
(2)檔案放在src下
step3:建立出DataSource介面的實現類
通過實現類的getConnection() 方法獲取資料庫連線物件,上述步驟的程式碼實現如下所示:
public class C3p0Utils {
//3、建立出DataSource介面的實現類
//之所以要把連線物件設定為類的靜態成員,是因為該類只要進入到記憶體,就會優先載入其靜態成員,於是就會建立介面DataSource的實現類的物件
//該實現類的物件會自動的讀取配置檔案中的資訊,有了該物件,就可以用來獲取資料庫連線物件了
private static DataSource dataSource = new ComboPooledDataSource(); //這個介面的實現類是直接new出來的,該介面是由C3P0實現的
//提供方法,通過DataSource的實現類物件獲取資料庫連線物件,呼叫該方法,就能獲取到資料庫連線物件
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
public class TestC3p0 {
public static void main(String[] args) throws SQLException {
//測試C3P0連線池:通過工具類獲取資料庫連線物件
Connection connection = C3p0Utils.getConnection();
System.out.println(connection);
//這裡是中間操作:建立sql執行物件、執行sql···
//釋放資源:該資料庫連線物件不會被銷燬,而是又被放回到連線池中了
connection.close();
}
}
注意:C3P0連線池所用到的配置檔案是xml格式的,且要保證固定的檔名和存放路徑,不能出錯,如下圖所示:
<?xml version="1.0" encoding="utf-8" ?>
<!--配置資料庫連線的4大資訊-->
<c3p0-config>
<!-- 使用預設的配置讀取連線池物件 -->
<default-config>
<!-- 連線引數 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://ip:port/databasename</property>
<property name="user">my_username</property>
<property name="password">my_password</property>
<!-- 連線池引數(可以不加,有預設數值,該引數主要由運營人員進行維護) -->
<property name="initialPoolSize">5</property>
</default-config>
</c3p0-config>
4 Druid 連線池的使用
阿里巴巴 Druid 資料庫連線池
目的:從連線池中獲取資料庫連線物件
實現步驟:
step1:匯入jar包
step2:把資料庫連線4大資訊放到properties檔案中(名字隨意,儲存位置隨意)
step3:建立DataSource介面實現類物件,呼叫物件方法獲取資料庫連線物件,上述步驟的程式碼實現如下所示:
public class DruidUtils {
private static DataSource dataSource;
static {
//自己讀取配置檔案,用類載入器
InputStream inputStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
//把流中的資料存到集合中
Properties properties = new Properties();
try {
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
//建立DataSource介面實現類物件(通過工廠類獲取,而不是直接new一個物件出來)
try {
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//定義方法,獲取連線物件
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
public class TestDruid {
public static void main(String[] args) throws SQLException {
Connection connection = DruidUtils.getConnection();
//測試:是否獲取到資料庫連線物件
System.out.println(connection);
//釋放資源:把連線物件返還給連線池
connection.close();
}
}
注意:Druid連線池所用到的配置檔案是properties格式的,無所謂檔名與路徑,需要我們先自己讀取該配置檔案,然後把資料傳給Druid,具體操作見上面的程式碼,配置檔案內容如下(4個引數的key值是固定的,不能改名!如果改名了會報錯,請注意):
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://ip:port/databasename
username=my_username
password=my_password
相關文章
- golang兩種資料庫連線池實現Golang資料庫
- 【MySQL】自定義資料庫連線池和開源資料庫連線池的使用MySql資料庫
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- Java中的資料庫連線池:HikariCP與C3P0Java資料庫
- 資料庫連線池原理資料庫
- Flask資料庫連線池Flask資料庫
- python資料庫連線池Python資料庫
- 資料庫連線(2) - 為什麼C3P0連線池那麼慢資料庫
- Druid資料庫連線池使用體驗UI資料庫
- 聊聊資料庫連線池 Druid資料庫UI
- 資料庫連線池實現資料庫
- Javaweb-資料庫連線池JavaWeb資料庫
- 手寫資料庫連線池資料庫
- Python資料庫連線池DButilsPython資料庫
- druid資料庫連線池的配置類UI資料庫
- 資料庫連線池優化配置(druid,dbcp,c3p0)資料庫優化UI
- 資料庫連線池_druid基本使用&工具類資料庫UI
- 資料庫連線池的實現及原理資料庫
- django中的資料庫連線池實現Django資料庫
- python資料庫連線池的正確用法Python資料庫
- MySql資料庫連線池專題MySql資料庫
- Java Druid資料庫連線池+SpringJDBCJavaUI資料庫SpringJDBC
- JavaWeb之事務&資料庫連線池JavaWeb資料庫
- mysql資料庫連線池配置教程MySql資料庫
- 使用 Spring Boot 2.4配置Oracle的UCP資料庫連線池Spring BootOracle資料庫
- 用idea配置c3p0連線池Idea
- 自定義帶監控的資料庫連線池資料庫
- 帶你進入資料庫連線池資料庫
- 資料庫連線池技術詳解資料庫
- Spring Boot整合Druid資料庫連線池Spring BootUI資料庫
- Springboot 整合阿里資料庫連線池 druidSpring Boot阿里資料庫UI
- 淺談JDBC和資料庫連線池JDBC資料庫
- 連線池
- 從原始碼分析DBCP資料庫連線池的原理原始碼資料庫
- 資料庫連線池到底應該設多大?資料庫
- springboot專案整合druid資料庫連線池Spring BootUI資料庫
- Tomcat 的 JDBC 連線池TomcatJDBC