惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
雷峰网
雷峰网
S
Securelist
V
Vulnerabilities – Threatpost
S
SegmentFault 最新的问题
T
The Exploit Database - CXSecurity.com
A
About on SuperTechFans
T
Threat Research - Cisco Blogs
Attack and Defense Labs
Attack and Defense Labs
L
LangChain Blog
Cyberwarzone
Cyberwarzone
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
V2EX
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
L
Lohrmann on Cybersecurity
S
Security Affairs
S
Secure Thoughts
P
Privacy & Cybersecurity Law Blog
T
Tailwind CSS Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cisco Talos Blog
Cisco Talos Blog
Spread Privacy
Spread Privacy
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
H
Heimdal Security Blog
L
LINUX DO - 热门话题
月光博客
月光博客
Apple Machine Learning Research
Apple Machine Learning Research
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
Google Online Security Blog
Google Online Security Blog
WordPress大学
WordPress大学
D
DataBreaches.Net
N
Netflix TechBlog - Medium
The Hacker News
The Hacker News
N
News and Events Feed by Topic
C
Check Point Blog
博客园_首页
Scott Helme
Scott Helme
T
Troy Hunt's Blog
U
Unit 42

博客园 - Enhydraboy

[ZT]MSN Messenger的口令获取源代码, MSNMessenger的口令是经过DPAPI加密后保存在注册表中 ADO Connection Strings[转贴] 农民造“飞碟”后记 Tomcat's Thread Pool Source(BT) - Enhydraboy 数据类型的不匹配可能会导致索引失效 msnlib中的MimeMessage.parse代码需要修改 我的MSN机器人终于有了自己的头像 Field6的类型说明 MSN协议中关于Send DP的研究 搞懂了MSN协议中的client id是怎么得到的 Java正则表达式详解[转载] MSN P2P资料转载 MSN协议中的msnobj浅析 MSNP10中修改自己的FRIENDLY NAME改成了RPR命令 msp10协议中的SYN好像发生了变化 准备让MSN机器人可以显示头像 jMSN开发指南 我自己的msn机器人诞生了 中国足球进步了
使用 jakata DBCP package 作 DB Connection pooling[ZT]
Enhydraboy · 2004-09-22 · via 博客园 - Enhydraboy

一般來說,在多人使用的系統中,應用程式若沒有運用 Connection pooling 的機制,會造成很大的效能問題,Connection 開開關關,除了慢,也會耗損資料庫伺服器的資源。大部分的 AP Server 都有提供 Connection pooling 的機制,程式設計師並無須去顧慮這個機制是如何運作的,只要懂得設定相關的參數即可。

假如說,某種狀況下,我們必須自行建置 Connection pooling 的機制時,該如何進行呢?自己寫當然是非常不划算的,況且也不一定寫的好,在這裡,我們使用 jakata project 裡的一個子專案 DBCP,來快速的建置一個隨處可用的 Connection pooling 機制。

在 Tomcat 裡,DBCP 是內建的,用來管理 DB Connection pooling。這個機制是可移植且可獨立出來使用的,要在你的運用程式中加上 DBCP 的功能,你必須至 http://jakarta.apache.org/commons/index.html 這個網址,找到該網頁內的 Components,共有三個必須下載:Collections 、 DBCP 、 Pool 。DBCP 是運用 Collections 及 Pool 這二個基礎的 Components 所設計出來的。當然,如果你有安裝 Tomcat server,最佳的方式是至 $TOMCAT_HOME/common/lib/ 目錄下去取得,保證版本的配合度不會出現問題。在 Tomcat server 裡,以 Tomcat 5.0.19 版內附的最新版本,這三個 Components 的檔名分別是 commons-collections.jar 、 commons-pool-1.1.jar 及 commons-dbcp-1.1.jar。

取得使用 DBCP 必備的 jar 檔後,請記得將這些 jar 檔,放置到 CLASSPATH 中,或直接放至 $JAVA_HOME/jre/lib/ext/ 目錄內。不過,由於 DBCP 有運用到 DataSource 的功能,而這功能是 J2EE 才有的,所以你還必須去下載 J2EE 的一個 javax.jar 檔。

環境建置好之後,接下來就可以開始設計 Connection Pooling 的機制,在這兒,我們介紹最簡單的作法,只要幾行指令就可以完成了,請看範例區裡的程式及其說明。

完成這個程式後,接下來在你的應用程式裡,用 DBConnect.getConnection() 來取得 DB Connection,就能享受到 Connection Pooling 的功能了。

在實際的運作中,這個範例有加上偵錯指令,會顯示出目前 Connection Pool 裡,有多少個 Idle 的 Connection 及多少個 Active 的 Connection,可供作為系統運作的參數調整依據。

範例:

01 package util;
02
03 import java.sql.*;
04 import javax.naming.*;
05 import javax.sql.*;
06
07 import org.apache.commons.dbcp.BasicDataSource;
08
09 public class DBConnect {
10 static DataSource dataSource = null;
11
12 public static DataSource setupDataSource( String sDrvName, String sUserName,
13 String sPwd, String connectURI ) {
14 BasicDataSource ds = new BasicDataSource();
15 ds.setDriverClassName( sDrvName );
16 ds.setUsername( sUserName );
17 ds.setPassword( sPwd );
18 ds.setUrl( connectURI );
19 ds.setMaxActive( 50 );
20 ds.setMaxIdle( 10 );
21 ds.setMaxWait( 10000 ); // 10 seconds
22 return ds;
23 }
24
25
26 // static init of the class
27 static {
28 try {
29 System.setProperty( "jdbc.drivers", "oracle.jdbc.driver.OracleDriver" );
30 Class.forName( "oracle.jdbc.driver.OracleDriver" );
31
32 dataSource = setupDataSource( "oracle.jdbc.driver.OracleDriver", "username",
33 "password", "jdbc:oracle:thin:@192.168.0.1:1521:SID" );
34 }
35 catch (Exception e) {
36 System.out.println( "DBConnect.java => Unable to load driver." + e.getMessage() );
37 }
38 }
39
40 /**
41 * 空的建構元,不作任何處理動作。
42 */
43 public DBConnect() {}
44
45 /**
46 * 取得 DB Connection.
47 */
48 public static Connection getConnection() throws SQLException,ClassNotFoundException {
49 BasicDataSource bds = (BasicDataSource) dataSource;
50 System.out.println("NumActive: " + bds.getNumActive() + ","
51 + "NumIdle: " + bds.getNumIdle() );
52 return dataSource.getConnection();
53 }
54 }