MySql中的數據庫連接池詳解
MySql數據庫連接池
1、概念
JDBC數據連接池:在做開發(fā)是不會單獨寫一個連接,都是使用數據庫連接池。
2、為什么會出現數據庫連接池
一個項目中,會有很多的用戶訪問,如果是和之前一樣單次連接,那么每次連接數據庫都要創(chuàng)建數據庫連接對象,來n個用戶九創(chuàng)建n個,這樣的高并發(fā),服務器受不了。而且用完后關閉連接,浪費資源,如果在關閉的時候出現異常未能關閉連接,就會出現內存泄漏(對象無法回收)
如果沒有池化技術,就相當于銀行開門,然后業(yè)務員服務你一個人,然后關門,下個人來了再開門,這樣很浪費資源
使用了數據庫連接池之后,我們在開發(fā)中就不需要寫連接數據庫代碼了

3、原理
- 和線程池類似,規(guī)定了最大的承載量,比如有留出了5個連接對象,那么第六個人就需要排隊
- 如果使用完畢去關閉數據庫連接對象,不會真的關閉,只是被連接池回收,然后給排隊的下一個人使用
- 相當于銀行開門,開門以后業(yè)務員服務客戶,沒有客戶的時候就等待,然后到點關門,業(yè)務員不再工作
4、數據庫連接池的提供商
數據庫連接池的有很多,比較熱門的有:
- DBCP
- 是tomcat自帶的,相對于C3P0來說速率較快,但是不穩(wěn)定
- C3P0
- 速率比較慢,但是非常穩(wěn)定
- Druid(德魯伊)
- 是阿里提供,最常用的,它結合了DBCP和C3P0各自的優(yōu)點
5、DataSource數據源
- 實現接口DataSource就可以編寫數據源
- 通過DataSource替換了DriverManager,相當于在各個數據庫廠商提供的驅動的基礎上,再次進行包裝
6、DBCP
- 導入jar包
- java中使用
public class DBCPTest {
private static DataSource dataSource = null;
public static void DbcpTest() {
try {
// 讀取文件配置
InputStream config = DBCPTest.class.getClassLoader().getResourceAsStream("resources/config.properties");
Properties prop = new Properties();
prop.load(config);
// 創(chuàng)建數據源 工廠模式
dataSource = BasicDataSourceFactory.createDataSource(prop);
// 從數據源中獲取連接
Connection connection = dataSource.getConnection();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}- 配置文件
driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=true username=root password=19981104
7、C3P0
- 導入jar包
- java中使用
public static void main(String[] args) throws PropertyVetoException, SQLException {
// 實例化C3P0提供的連接池
ComboPooledDataSource cpds = new ComboPooledDataSource();
// 加載當前使用的數據庫
cpds.setDriverClass("com.mysql.cj.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=true");
cpds.setUser("root");
cpds.setPassword("19981104");
// 通過Datasource數據源獲得連接對象
Connection connection = cpds.getConnection();
// 設置初始化連接池中的連接對象
cpds.setInitialPoolSize(2);
// 也可以通過加載配置文件使用數據庫
// 在實例化時,去加載配置文件
// 這里的配置文件名是xml中的named-config的name
ComboPooledDataSource cpds2 = new ComboPooledDataSource("intergalactoApp");
Connection connection2 = cpds2.getConnection();
System.out.println(connection2);
}配置XMl
- XML是一個文本標記語言,就是使用標簽對組成的語言,進行記錄文本信息
- XML文件主要的作用就是標記存儲內容的
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 在這下面配置數據庫信息 -->
<named-config name="intergalactoApp">
<!-- 配置驅動,url,user和password -->
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/school?useSSL=true</property>
<property name="user">root</property>
<property name="password">password</property>
<property name="acquireIncrement">50</property>
<property name="initialPoolSize">100</property>
<property name="minPoolSize">50</property>
<property name="maxPoolSize">1000</property>
<!-- intergalactoApp adopts a different approach to configuring statement caching -->
<property name="maxStatements">0</property>
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>8、Druid(德魯伊)
- 導入jar包
- java中使用
public static void main(String[] agrs) throws Exception {
DruidDataSource dataSource = new DruidDataSource();
// 不管是誰想要連接數據庫服務器,都需要用戶名,密碼,url,driver
// dataSource.setDriverClassName(driverClass);
// dataSource.setUrl(jdbcUrl);
// 讀取配置文件
InputStream config = DruidTest.class.getClassLoader().getResourceAsStream("resources/config.properties");
Properties prop = new Properties();
prop.load(config);
// 使用工廠模式 -- 提供了生產數據源對象的工廠
// 讀取Druid讀取配置文件
DataSource dataSource2 = DruidDataSourceFactory.createDataSource(prop);
// 獲得連接對象
Connection connection = dataSource2.getConnection();
}總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL報錯1040'Too?many?connections'的原因以及解決方案
這篇文章主要給大家介紹了關于MySQL報錯1040'Too?many?connections'的原因以及解決方案,文中通過實例代碼以及圖文介紹的非常詳細,需要的朋友可以參考下2022-07-07
MySQL?Prepared?Statement?預處理的操作方法
預處理語句是一種在數據庫管理系統(tǒng)中使用的編程概念,用于執(zhí)行對數據庫進行操作的?SQL?語句,這篇文章主要介紹了MySQL?Prepared?Statement?預處理?,需要的朋友可以參考下2024-08-08
CentOS 7中升級MySQL 5.7.23的坑與解決方法
我們在安裝升級的時候會遇到一些問題,不過可能每個人遇到的問題不一樣,多找找才能解決問題喲,下面這篇文章主要給大家介紹了關于在CentOS 7中升級MySQL 5.7.23遇到的一個坑與解決方法,需要的朋友可以參考下2018-10-10

