国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

通過動態代理(Proxy)實現的數據庫連接池的創建連接與歸還鏈接的

來源:懂視網 責編:小采 時間:2020-11-09 15:46:13
文檔

通過動態代理(Proxy)實現的數據庫連接池的創建連接與歸還鏈接的

通過動態代理(Proxy)實現的數據庫連接池的創建連接與歸還鏈接的:package tk.dong.connection.util;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Conn
推薦度:
導讀通過動態代理(Proxy)實現的數據庫連接池的創建連接與歸還鏈接的:package tk.dong.connection.util;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Conn

package tk.dong.connection.util;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Conn

package tk.dong.connection.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
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.sql.SQLFeatureNotSupportedException;
import java.util.LinkedList;
import java.util.Properties;
import java.util.logging.Logger;

import javax.sql.DataSource;

//這是通過動態代理(Proxy)實現的數據庫連接池的創建連接與歸還鏈接的操作
public class JdbcPoolProxy implements DataSource {

	// 創建連接池
	private static LinkedList connections = new LinkedList();
	static {
	// 獲取properties的配置文件,并以流的方式存儲
	InputStream inputStream = JdbcPoolProxy.class.getClassLoader()
	.getResourceAsStream("jdbc.properties");
	// 創建properties的屬性處理對象
	Properties properties = new Properties();
	try {
	// 將屬性文件載入
	properties.load(inputStream);
	// 獲取連接的驅動文件
	Class.forName(properties.getProperty("driverClassName"));
	// 循環創建連接并放入連接池
	for (int i = 0; i < 10; i++) {
	// 創建連接對象
	final Connection conn = DriverManager.getConnection(
	properties.getProperty("url"),
	properties.getProperty("user"),
	properties.getProperty("pass"));

	// 將創建分連接對象添加到連接池
	// 通過動態代理處理close的方法實現取出的連接對象返回連接池的效果
	connections.add((Connection) Proxy.newProxyInstance(
	JdbcPoolProxy.class.getClassLoader(),
	new Class[] { Connection.class },
	new InvocationHandler() {

	@Override
	public Object invoke(Object proxy, Method method,
	Object[] args) throws Throwable {
	// 判斷當前執行的方法名是不是close時還執行自己的方法體
	if (!method.getName().equals("close")) {
	// 執行目標方法
	return method.invoke(conn, args);
	}
	// 如果是close方法
	// 向連接池中添加連接對象
	connections.add(conn);
	System.out.println("又一個連接用玩完了,返回個連接池,當前連接池有"
	+ connections.size() + "個連接對象");
	return null;
	}
	}));
	System.out.println("線連接池添加了一個鏈接對象,當前連接池有======"
	+ connections.size() + "=====個連接對象");
	}

	} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	} catch (ClassNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	}

	}

	@Override
	public Connection getConnection() throws SQLException {
	// 聲明連接對象
	Connection conn = null;
	// 判斷連接池中是否有連接對象
	if (connections.size() > 0) {
	// 從連接池取出連接對象
	conn = connections.removeFirst();
	System.out.println("有一個連接對象被占用,連接池還有=========" + connections.size()
	+ "個連接");
	}

	return conn;
	}

	@Override
	public Connection getConnection(String username, String password)
	throws SQLException {
	// TODO Auto-generated method stub
	return null;
	}

	@Override
	public PrintWriter getLogWriter() throws SQLException {
	// TODO Auto-generated method stub
	return null;
	}

	@Override
	public void setLogWriter(PrintWriter out) throws SQLException {
	// TODO Auto-generated method stub

	}

	@Override
	public void setLoginTimeout(int seconds) throws SQLException {
	// TODO Auto-generated method stub

	}

	@Override
	public int getLoginTimeout() throws SQLException {
	// TODO Auto-generated method stub
	return 0;
	}

	@Override
	public Logger getParentLogger() throws SQLFeatureNotSupportedException {
	// TODO Auto-generated method stub
	return null;
	}

	@Override
	public  T unwrap(Class iface) throws SQLException {
	// TODO Auto-generated method stub
	return null;
	}

	@Override
	public boolean isWrapperFor(Class iface) throws SQLException {
	// TODO Auto-generated method stub
	return false;
	}

}
下面是測試代碼
package tk.dong.connectionPool.test;

import java.sql.Connection;
import java.sql.SQLException;

import org.junit.Test;

import tk.dong.connection.util.JdbcPoolProxy;

public class JdbcPoolProxyTest {

	@Test
	public void test() throws SQLException {
	// 創建連接池對象
	JdbcPoolProxy jdbcPoolProxy = new JdbcPoolProxy();

	// 從連接池中取出連接
	jdbcPoolProxy.getConnection();
	jdbcPoolProxy.getConnection();
	jdbcPoolProxy.getConnection();
	jdbcPoolProxy.getConnection();

	Connection conn = jdbcPoolProxy.getConnection();
	conn.close();

	jdbcPoolProxy.getConnection();
	jdbcPoolProxy.getConnection();

	}

}

下面是運行結果

線連接池添加了一個鏈接對象,當前連接池有======1=====個連接對象
線連接池添加了一個鏈接對象,當前連接池有======2=====個連接對象
線連接池添加了一個鏈接對象,當前連接池有======3=====個連接對象
線連接池添加了一個鏈接對象,當前連接池有======4=====個連接對象
線連接池添加了一個鏈接對象,當前連接池有======5=====個連接對象
線連接池添加了一個鏈接對象,當前連接池有======6=====個連接對象
線連接池添加了一個鏈接對象,當前連接池有======7=====個連接對象
線連接池添加了一個鏈接對象,當前連接池有======8=====個連接對象
線連接池添加了一個鏈接對象,當前連接池有======9=====個連接對象
線連接池添加了一個鏈接對象,當前連接池有======10=====個連接對象
有一個連接對象被占用,連接池還有=========9個連接
有一個連接對象被占用,連接池還有=========8個連接
有一個連接對象被占用,連接池還有=========7個連接
有一個連接對象被占用,連接池還有=========6個連接
有一個連接對象被占用,連接池還有=========5個連接
又一個連接用玩完了,返回個連接池,當前連接池有6個連接對象
有一個連接對象被占用,連接池還有=========5個連接
有一個連接對象被占用,連接池還有=========4個連接

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

通過動態代理(Proxy)實現的數據庫連接池的創建連接與歸還鏈接的

通過動態代理(Proxy)實現的數據庫連接池的創建連接與歸還鏈接的:package tk.dong.connection.util;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Conn
推薦度:
標簽: 創建 代理 連接
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美色亚洲图 | 黄a毛片| 欧美午夜一区二区福利视频 | 亚洲欧美中文日韩在线 | 亚洲一区色 | 69国产成人综合久久精品91 | 欧美日韩国产综合在线 | 免费在线观看中文字幕 | 日韩精品一区二区三区视频 | 欧美日韩精品一区二区三区视频在线 | 国产在线精品99一卡2卡 | 亚洲欧美日韩色 | 亚洲国产日韩欧美一区二区三区 | 久久久久国产精品 | 久久国产精品成人免费 | 日本中文字幕有码 | 久久久精品久久久久久久久久久 | 亚洲色图第四页 | 国产一区二区精品久久 | 国产伦精品一区二区三区视频小说 | 美女视频黄a视频全免费网站色 | 国产成人久久精品区一区二区 | 欧美精品一区二区三区免费观看 | 国产成人精品一区二三区在线观看 | 国产成人3p视频免费观看 | 一区二区三区美女 | 欧洲日韩视频二区在线 | 午夜欧美在线 | 99久久免费精品国产免费高清 | 中文字幕日韩有码 | 日本色图在线观看 | 亚洲四色| 欧美高清日韩 | 乌克兰性欧美精品高清bd | 亚洲最新视频在线观看 | 国产99久久精品 | 欧美色综合图区 | 亚洲天堂黄色 | 亚洲福利网站 | 日本久久香蕉一本一道 | 欧美精品亚洲网站 |