黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 詳解JDBC連接池

詳解JDBC連接池

更新時(shí)間:2021-02-20 17:06:22 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1295次

用Java代碼操作數(shù)據(jù)庫,需要數(shù)據(jù)庫連接對(duì)象,一個(gè)用戶至少要用到一個(gè)連接。現(xiàn)在假設(shè)有成千上百萬個(gè)用戶,就要?jiǎng)?chuàng)建十分巨大數(shù)量的連接對(duì)象,這會(huì)使數(shù)據(jù)庫承受極大的壓力,為了解決這種現(xiàn)象,一種技術(shù)出現(xiàn)了,這就是JDBC連接池

一、JDBC連接池原理

傳統(tǒng)方式創(chuàng)建和銷毀與數(shù)據(jù)庫的連接都需要消耗系統(tǒng)資源和時(shí)間,為了復(fù)用連接,代替?zhèn)鹘y(tǒng)的頻繁占用系統(tǒng)資源和耗費(fèi)時(shí)間的方式,便于管理連接,可以規(guī)定最大的連接數(shù)(控制應(yīng)用服務(wù)器對(duì)數(shù)據(jù)庫的并發(fā)訪問),JDBC連接池就是用來解決這些問題的。

在要使用連接對(duì)象之前先創(chuàng)建好規(guī)定數(shù)量(根據(jù)服務(wù)器的負(fù)載能力制定)的連接對(duì)象存放到連接池(實(shí)現(xiàn)池子的方式一般是用鏈表結(jié)構(gòu)的集合來實(shí)現(xiàn))中。

當(dāng)應(yīng)用服務(wù)器需要連接對(duì)象的時(shí)候就從連接池中獲取,用完該連接對(duì)象時(shí)歸還連接對(duì)象到連接池中。當(dāng)應(yīng)用服務(wù)器需要連接對(duì)象而當(dāng)前連接池中沒有連接對(duì)象可取時(shí),就讓其先等待,如果等待超時(shí)還沒有獲取到連接對(duì)象,就新建一個(gè)連接對(duì)象給服務(wù)器讓其使用,用完后銷毀該創(chuàng)建的對(duì)象。

二、JDBC連接池的簡(jiǎn)單實(shí)現(xiàn)

import java.io.IOException;

import java.io.InputStream;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.LinkedList;

import java.util.Properties;

public class MyPool {

private int initCount = 3; // 初始連接數(shù)

private int maxCount = 6; // 最大連接數(shù)

private int currentCount = 0; // 當(dāng)前連接數(shù)

// 用于保存連接的鏈表集合

private LinkedList<Connection> pools = new LinkedList<Connection>();

// 參數(shù)

private static String driverClass;

private static String url;

private static String user;

private static String password;



// 初始化參數(shù)

static {

InputStream input = MyPool.class.getResourceAsStream("/jdbcConf.properties");

Properties prop = new Properties();

try {

prop.load(input);

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

input.close();

} catch (IOException e) {

e.printStackTrace();

}

}

url = prop.getProperty("url");

user = prop.getProperty("user");

password = prop.getProperty("password");

driverClass = prop.getProperty("driverClass");

try {

Class.forName(driverClass);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}



public MyPool() {

// 初始化連接

for(int i = 0; i < initCount; i++) {

pools.addFirst(createConn());

}

}



// 創(chuàng)建連接

private Connection createConn() {

Connection proxyConn = null;

try {

Connection conn = DriverManager.getConnection(url, user, password);

// 對(duì)conn進(jìn)行動(dòng)態(tài)代理

proxyConn = (Connection) Proxy.newProxyInstance(

conn.getClass().getClassLoader(),

conn.getClass().getInterfaces(),

new InvocationHandler() {

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

// 如果當(dāng)前連接數(shù)小于初始連接數(shù),則關(guān)閉連接時(shí)將連接放回連接池

String methodName = method.getName();

if ("close".equals(methodName)) {

if (pools.size() < initCount) {

pools.addLast(conn);

return null;

}

currentCount--;

}

return method.invoke(conn, args);

}

}

);

currentCount++;

} catch (SQLException e) {

e.printStackTrace();

}

return proxyConn;

}



// 獲取連接

public Connection getConn() {

// 如果連接池中還有連接,那就直接獲取

if(pools.size() > 0) {

return pools.removeFirst();

}



// 如果連接池中沒有連接,就判斷是否達(dá)到最大連接數(shù),如果沒有就新建連接

if(currentCount < maxCount) {

return createConn();

}



// 達(dá)到最大連接數(shù),就拋出異常

throw new RuntimeException("達(dá)到最大連接數(shù)了!!!");

}

}

三、開源的JDBC連接池技術(shù)

Sun公司約定:如果是連接池技術(shù),需要實(shí)現(xiàn)一個(gè)接口javax.sql.DataSource

DBCP和C3P0是兩個(gè)開源的連接池技術(shù)。下面我們做一下簡(jiǎn)單的介紹:

1、DBCP

DBCP是Apache軟件基金組織下的開源連接池實(shí)現(xiàn),Tomcat的連接池正是采用DBCP來實(shí)現(xiàn)的。

DBCP既可以與應(yīng)用服務(wù)器整合使用,也可由應(yīng)用程序獨(dú)立使用。

2、c3p0概述

Spring框架默認(rèn)支持C3P0連接池技術(shù)。

C3P0連接池的核心類:ComboPooledDataSource

JDBC連接池的出現(xiàn)歸根結(jié)底還是為了解決應(yīng)用服務(wù)器對(duì)數(shù)據(jù)庫的并發(fā)訪問和代替?zhèn)鹘y(tǒng)的頻繁占用系統(tǒng)資源和耗費(fèi)時(shí)間的方式。這門技術(shù)涉及到的東西遠(yuǎn)比本文寫出來的要復(fù)雜的多,想要徹底弄明白其中的彎彎繞繞,建議觀看本站的JDBC教程,打好基礎(chǔ),慢慢掌握J(rèn)DBC的各種知識(shí)。

 

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 成人免费观看www视频 | 免费在线观看亚洲 | 奇米影视一区二区三区 | 91精品国产闺蜜国产在线 | 欧美视频二区 | 色综合天天综合中文网 | 乱仑小说日本aⅴ | 日韩欧美一及在线播放 | 天天久 | 黄网站在线播放视频免费观看 | 18视频在线观看网站 | 中文字幕2区 | a黄网站 | 真实乱欲视频 | 色免费网站| 欧美视频免费在线播放 | 九九色视频在线观看 | 最近免费中文字幕大全高清大全1 | 国产成人影院一区二区 | 成人网视频免费播放 | 欧美亚洲网站 | 日本aⅴ永久免费网站www | 日本一区二区高清 | 又粗又黄又猛又爽大片免费 | 亚洲午夜精品一区二区 | 日日操日日摸 | 免费人成网站7777视频 | 一级毛片高清大全免费观看 | 日本特级淫片 | 最近中文字幕免费版在线3 最近中文字幕免费版在线 最近中文字幕免费mv在线视频 | 成年人在线视频免费观看 | 国产小视频福利 | 亚欧有色在线观看免费版高清 | 国产成人三级 | 国产成人精品免费视频大 | 中文欧美一级强 | 欧美国产伦久久久久 | 韩漫画无遮挡羞免费网站 | 在线免费公开视频 | 高h辣h双处全是肉一对一 | videoshd4k欧美激情 |