Proxool單獨應用比較麻煩,畢竟自己實作的資料庫連接配接池管理工具難免有不足之處,是以可以考慮與Spring結合,形成一個DataSource對象來操作資料庫,這樣比較簡單靈活,可靠性也高。
下面是在上文例子的基礎上所改寫的,環境如下:
Spring 2.0
proxool-0.9.1
JDK1.5
1、寫Spring的配置檔案
syndsconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource"
class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="driverUrl">
<value>jdbc:oracle:thin:@192.168.104.192:1521:tim</value>
<property name="user" value="tim"/>
<property name="password" value="tim_8968888"/>
<property name="alias" value="Pool_dbname"/>
<property name="maximumActiveTime" value="300000"/>
<property name="prototypeCount" value="0"/>
<property name="maximumConnectionCount" value="50"/>
<property name="minimumConnectionCount" value="2"/>
<property name="simultaneousBuildThrottle" value="50"/>
<property name="houseKeepingTestSql" value="select CURRENT_DATE"/>
</bean>
</beans>
2、寫Spring的上下文環境管理工具
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by IntelliJ IDEA.
*
* @author leizhimin 2009-10-15 10:21:38
*/
public class ApplicationContextUtil {
private static ApplicationContext applicationContext;
static {
if (applicationContext == null)
applicationContext = rebuildApplicationContext();
}
/**
* 重新建構Spring應用上下文環境
*
* @return ApplicationContext
*/
public static ApplicationContext rebuildApplicationContext() {
return new ClassPathXmlApplicationContext("/syndsconfig.xml");
* 擷取Spring應用上下文環境
* @return
public static ApplicationContext getApplicationContext() {
return applicationContext;
* 簡單的上下文環境測試
public static void main(String[] args) {
rebuildApplicationContext();
if (applicationContext == null) {
System.out.println("ApplicationContext is null");
} else {
System.out.println("ApplicationContext is not null!");
}
}
3、寫測試類
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
* @author leizhimin 2009-10-10 17:59:47
public class TestProxool {
public static String dburl = "jdbc:oracle:thin:@192.168.104.192:1521:tim";
public static String user = "tim";
public static String password = "tim_8968888";
* JDBC方式測試
* @throws Exception
public static void test1() throws Exception {
String testsql = "select * from village t where lastid = 346";
//1:注冊驅動類
Class.forName("oracle.jdbc.driver.OracleDriver");
//2:建立資料庫連接配接
// Connection conn = DriverManager.getConnection(dburl, user, password);
DataSource ds = (DataSource) ApplicationContextUtil.getApplicationContext().getBean("dataSource");
Connection conn = ds.getConnection();
//3:建立執行SQL的對象
Statement stmt = conn.createStatement();
//4:執行SQL,并擷取傳回結果
ResultSet rs = stmt.executeQuery(testsql);
//5:處理傳回結果,此處列印查詢結果
while (rs.next()) {
System.out.print(rs.getLong("id") + "\t");
System.out.print(rs.getString("name") + "\t");
System.out.println();
//6:關閉資料庫連接配接
conn.close();
public static void main(String[] args) throws Exception {
test1();
控制台輸出如下:
2009-10-15 12:37:03 - INFO org.springframework.core.CollectionFactory - JDK 1.4+ collections available
2009-10-15 12:37:03 - INFO org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [syndsconfig.xml]
2009-10-15 12:37:04 - INFO org.springframework.context.support.ClassPathXmlApplicationContext - Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=9737354]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource]; root of BeanFactory hierarchy
2009-10-15 12:37:04 - INFO org.springframework.context.support.ClassPathXmlApplicationContext - 1 beans defined in application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=9737354]
2009-10-15 12:37:04 - INFO org.springframework.context.support.ClassPathXmlApplicationContext - Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@10655dd]
2009-10-15 12:37:04 - INFO org.springframework.context.support.ClassPathXmlApplicationContext - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default[org.springframework.context.event.SimpleApplicationEventMulticaster@c8f6f8]
2009-10-15 12:37:04 - INFO org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource]; root of BeanFactory hierarchy]
5411 張一村
5412 張二村
5413 張三村
5414 張四村
5415 南原村
5416 辛莊村
5417 凡村
5418 西陽村
5419 人馬村
5420 前關村
5421 後關村
5422 趙村
5423 水淆村
5424 溝東村
5425 陳村
5426 窯店村
5427 坡頭村
20588 大安頭
20589 澗裡村
20590 人馬寨
20591 白草村
20592 窯院村
20593 寺下村
20594 反上村
33651 小安頭
33652 五花嶺
33653 東溝
33654 西溝
33655 南溝
33656 王村
33657 營前
33659 東陽
33661 太陽
33663 豐陽
33665 宜村
33667 窯頭
32225 石原村
32226 廟上村
32227 廟窪
38739 丁管營
38841 澗西
2009-10-15 12:37:05 - INFO org.logicalcobwebs.proxool.Pool_dbname - Shutting down 'Pool_dbname' pool immediately [Shutdown Hook]
2009-10-15 12:37:05 - INFO org.logicalcobwebs.proxool.PrototyperController - Stopping Prototyper thread
2009-10-15 12:37:05 - INFO org.logicalcobwebs.proxool.HouseKeeperController - Stopping HouseKeeper thread
Process finished with exit code 0
info日志是log4j輸出的。
當然,可以在Spring中配置多個DataSource,都沒問題的。
----------------------
另外今天有個同僚說Proxool不能配置多個連接配接池,我經過測試,Proxool可以配置多個連接配接池,可以放心使用。
配置檔案如下小:
<property name="alias" value="proxool.a2"/>
<bean id="dataSource2"
<value>jdbc:oracle:thin:@192.168.104.164:1521:orcl</value>
<property name="user" value="rural"/>
<property name="password" value="rural"/>
<property name="alias" value="proxool.a1"/>
另外,進行極刑的變态測試,代碼***,目的是為了将程式高挂,可惜沒挂,呵呵!
import java.sql.SQLException;
* @author leizhimin 2009-10-15 17:39:50
public class Test {
public static void main(String[] args) throws SQLException {
ApplicationContext ctx = ApplicationContextUtil.getApplicationContext();
DataSource ds1 = (DataSource)ctx.getBean("dataSource");
DataSource ds2 = (DataSource)ctx.getBean("dataSource2");
Connection conn1 = ds1.getConnection();
Connection conn2 = ds2.getConnection();
Statement stmt = conn1.createStatement();
ResultSet rs = stmt.executeQuery("select * from city");
Statement stmt2 = conn2.createStatement();
//4:執行SQL,并擷取傳回結果
// ResultSet rs2 = stmt2.executeQuery("select * from city");
ResultSet rs2 = stmt2.executeQuery("select * from lm where lm_id = "+rs.getLong("id"));
//5:處理傳回結果,此處列印查詢結果
while (rs2.next()) {
System.out.println(rs2.getLong(1));
}
System.out.println("<<<<");
//6:關閉資料庫連接配接
conn1.close();
conn2.close();
// System.out.println("----------");
//
// Statement stmt2 = conn2.createStatement();
// //4:執行SQL,并擷取傳回結果
// ResultSet rs2 = stmt2.executeQuery("select count(*) from lm");
// //5:處理傳回結果,此處列印查詢結果
// while (rs2.next()) {
// System.out.println(rs2.getLong(1));
// }
// //6:關閉資料庫連接配接
// conn2.close();
輸出如下:
2009-10-15 18:25:37 - INFO org.springframework.core.CollectionFactory - JDK 1.4+ collections available
2009-10-15 18:25:37 - INFO org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [syndsconfig.xml]
2009-10-15 18:25:37 - INFO org.springframework.context.support.ClassPathXmlApplicationContext - Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=6161922]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource,dataSource2]; root of BeanFactory hierarchy
2009-10-15 18:25:37 - INFO org.springframework.context.support.ClassPathXmlApplicationContext - 2 beans defined in application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=6161922]
2009-10-15 18:25:37 - INFO org.springframework.context.support.ClassPathXmlApplicationContext - Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@18dfef8]
2009-10-15 18:25:37 - INFO org.springframework.context.support.ClassPathXmlApplicationContext - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default[org.springframework.context.event.SimpleApplicationEventMulticaster@134bed0]
2009-10-15 18:25:37 - INFO org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource,dataSource2]; root of BeanFactory hierarchy]
410100 鄭州市
<<<<
410200 開封市
410300 洛陽市
410400 平頂山市
410500 安陽市
410600 鶴壁市
410700 新鄉市
410800 焦作市
410881 濟源市
410900 濮陽市
411000 許昌市
411100 漯河市
411200 三門峽市
411300 南陽市
411400 商丘市
411500 信陽市
411600 周口市
411700 駐馬店市
2009-10-15 18:25:39 - INFO org.logicalcobwebs.proxool.proxool.a2 - Shutting down 'proxool.a2' pool immediately [Shutdown Hook]
2009-10-15 18:25:39 - INFO org.logicalcobwebs.proxool.proxool.a1 - Shutting down 'proxool.a1' pool immediately [Shutdown Hook]
2009-10-15 18:25:39 - INFO org.logicalcobwebs.proxool.PrototyperController - Stopping Prototyper thread
2009-10-15 18:25:39 - INFO org.logicalcobwebs.proxool.HouseKeeperController - Stopping HouseKeeper thread
如果大家想看Web應用的例子,可以參看:
<a href="http://blog.csdn.net/goodhumor/archive/2008/03/04/2144911.aspx">http://blog.csdn.net/goodhumor/archive/2008/03/04/2144911.aspx</a>
本文轉自 leizhimin 51CTO部落格,原文連結:http://blog.51cto.com/lavasoft/212616,如需轉載請自行聯系原作者