? Tomcat從5.x開始就可以在server.xml里配置數據源,后來用到了Proxool對比了一下覺得Proxool更方便更好用,它提供了更多的方法,簡單,推薦大家使用.
? 下載地址:http://proxool.sourceforge.net/ 最新版本為: Proxool 0.9.0RC2
? 下載后解壓縮Proxool 0.9.0RC2后,把Proxool 0.9.0RC2/lib下的.jar文件部署到WEB-INF/lib下.
? 看看下面的范例(example for Oracle):
? Proxool.jsp
________________________________________________________________________________________________________________________________________
<%@ page import="java.sql.*"%>
<%@ page contentType="text/html;charset=gb2312"%>
<html>
?? ?<head>
?? ??? ?<title>Proxool.jsp</title>
?? ?</head>
?? ?<body>
?? ??? ?<h2>使用Proxool.jsp</h2>
?? ??? ?<%
?? ??? ??? Connection con=null;
?? ??? ??? Statement stmt=null;
?? ??? ??? ResultSet rs=null;
?? ??? ?? ?
?? ??? ??? String ename="";
?? ??? ?? ?
?? ??? ??? try
?? ??? ??? {
?? ??? ????? Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
?? ??? ????? con=DriverManager.getConnection("proxool.JSPBook:oracle.jdbc.driver.OracleDriver:
?????????????????????? jdbc:oracle:thin:@yang:1521:orcl","scott","ss");?? ??? ???? ?
?? ??? ????? stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
?? ??? ?????????????????????????????? ResultSet.CONCUR_UPDATABLE);
?? ??? ????? String query="select * from emp";
?? ??? ????? rs=stmt.executeQuery(query);
?? ??? ????? while(rs.next())
?? ??? ????? {
?? ??? ??????? ename=rs.getString("ename");
????? %>
??????? 從emp表中取出姓名<%=ename%><br>
????? <%
?? ??? ????? }
?? ??? ????? stmt.close();
?? ??? ????? con.close();
?? ??? ??? }
?? ??? ??? catch(SQLException e)
?? ??? ??? {
?? ??? ????? out.println("發生異常"+e);
?? ??? ??? }
?? ??? ??? finally
?? ??? ??? {
?? ??? ????? try
?? ??? ????? {
?? ??? ??????? if(con!=null)
?? ??? ??????? {
?? ??? ????????? con.close();
?? ??? ??????? }
?? ??? ????? }
?? ??? ????? catch(SQLException ne)
?? ??? ????? {
?? ??? ??????? out.println("SQLException:"+ne);
?? ??? ????? }
?? ??? ??? }
?? ??? ?%>
?? ?</bdoy>
</html>
Proxool.jsp通過Proxool連接池取得Connection,然后顯示emp表格中的ename.
首先動態加載Proxool的driver:
? Class.forName("org.logicalcobwebs.proxool.ProxoolDriver);
然后將Proxool URL分為三個部分: 連接池的別名,JDBC驅動程序(DataBase JDBC Drivers),連接URL.
設定Proxool
proxool提供了許多連接池的參數,例如:連接池最多有幾個Connection,最少有幾個Connection,Connection生命期限等等。
Proxool主要有以下四種設定方式:
(一) 通過java.util.Properties對象來設定,例如:
Properties info=new Properties();
info.setProperty("proxool.maximum-connection-count","20");
info.setProperty("proxool.house-keeping-test-sql","select CURRENT_DATE");
info.setProperty("user","your DB username");
info.setProperty("password","your DB prassword");
String alias="Develop"; //Proxool連接池的別名,根據自己喜好隨便寫^_^
String driverClass="oracle.jdbc.driver.OracleDriver";
String driverUrl="jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName";
String url="proxool."+alias+":"+drvierClass+":"+driverUrl;
connection=DrvierManager.getConnection(rul,info);
(二) 通過XML文件來設定,例如:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored.-->
<proxool>
? <alias>Develop</alias>
? <driver-url>
??? jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
? </driver-url>
? <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
? <driver-properties>
??? <property name="user" value="your database name"/>
??? <property name="password" value="your DB password"/>
? </driver-properties>
? <maximum-connection-count>10</maximum-connection-count>
? <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
然后通過JAXPConfiguration讀取XML文件:
JAXPConfigurator.configure("/WEB-INF/classes/proxool.xml",false);
(三) 先通過Properties文件來設定,例如:
jdbc-0.proxool.alias=Develop
jdbc-0.proxool.drvier-url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver;
jdbc-0.user=your database username
jdbc-0.password=your database password
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
然后通過PropertyConfigurator讀取Properties文件:
PropertyConfigurator.configure("/WEB-INF/classes/Proxool.properties");
(四)在web.xml中,通過servlet來設定.方法又有三種,前兩種是按照格式來的:
1.XML文件
<servlet>
? <servlet-name>ServletConfigurator</servlet-name>
? <servlet-class>
???? org.logicalcobwebs.proxool.configuration.ServletConfigurator
? </servlet-class>
? <init-param>
???? <param-name>xmlFile</param-name>
???? <param-value>WEB-INF/classes/Proxool.xml</param-value>
? </init-param>
? <load-on-start>1</load-on-start>
</servlet>
2.Properties文件
<servlet>
? <servlet-name>ServletConfigurator</servlet-name>
? <servlet-class>
???? org.logicalcobwebs.proxool.configuration.ServletConfigurator
? </servlet-class>
? <init-param>
???? <param-name>propertyFile</param-name>
???? <param-value>WEB-INF/classes/Proxool.properties</param-value>
? </init-param>
? <load-on-start>1</load-on-start>
</servlet>
3.Init Prameter
<servlet>
? <servlet-name>ServletConfigurator</servlet-name>
? <servlet-class>
???? org.logicalcobwebs.proxool.configuration.ServletConfigurator
? </servlet-class>
? <init-param>
???? <init-name>jdbc-0.proxool.alias</init-param>
???? <init-value>Develop</init-value>
? </init-param>
? <init-param>
???? <init-name>jdbc-0.proxool.driver-rul</init-param>
???? <init-value>
??????? jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
???? </init-value>
? </init-param>
? <init-param>
???? <init-name>jdbc-0.proxool.driver-class</init-param>
???? <init-value>oracle.jdbc.driver.OracleDriver</init-value>
? <init-param>
</servlet>
建議大家使用第四種方法,好處在于當Container啟動時,Proxool的參數會自動設定加載到內存中,原因在于:
<servlet>
......略
<load-on-start>1</load-on-start>
一個完整的示例如下:
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
???????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????? xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
???????? version="2.4">
.......略
? <servlet>
???? <servlet-name>ServletConfigurator</servlet-name>
???? <servlet-class>
?????? org.logicalcobwebs.proxool.configuration.ServletConfigurator
???? </servlet-class>
???? <init-param>
?????? <param-name>propertyFile</param-name>
?????? <param-value>WEB-INF/classes/Proxool.properties</param-value>
???? </init-param>
???? <load-on-start>1</load-on-start>
? </servlet>
.......略
</web-app>
Proxool.proterties
jdbc-0.proxool.alias=Develop
jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver
jdbc-0.proxool.driver.url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.prototype-count=4
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
jdbc=0.proxool.verbose=true
我們可以用下面的Test Page來進行測試
Proxool-config.jsp
____________________________________________________
<%@ page import="java.sql.*"%>
<%@ page contentType="text/html;charset=gb2312"%>
<html>
?? ?<head>
?? ??? ?<title>Proxool.jsp</title>
?? ?</head>
?? ?<body>
?? ??? ?<h2>使用Proxool.jsp</h2>
?? ??? ?<%
?? ??? ??? Connection con=null;
?? ??? ??? Statement stmt=null;
?? ??? ??? ResultSet rs=null;
?? ??? ?? ?
?? ??? ??? String ename="";
?? ??? ?? ?
?? ??? ??? try
?? ??? ??? {
?? ??? ????? con=DriverManager.getConnection("proxool.Develop");?? ??? ???? ?
?? ??? ????? stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
?? ??? ?????????????????????????????? ResultSet.CONCUR_UPDATABLE);
?? ??? ????? String query="select * from emp";
?? ??? ????? rs=stmt.executeQuery(query);
?? ??? ????? while(rs.next())
?? ??? ????? {
?? ??? ??????? ename=rs.getString("ename");
????? %>
??????? 從emp表中取出姓名<%=ename%><br>
????? <%
?? ??? ????? }
?? ??? ????? stmt.close();
?? ??? ????? con.close();
?? ??? ??? }
?? ??? ??? catch(SQLException e)
?? ??? ??? {
?? ??? ????? out.println("發生異常"+e);
?? ??? ??? }
?? ??? ??? finally
?? ??? ??? {
?? ??? ????? try
?? ??? ????? {
?? ??? ??????? if(con!=null)
?? ??? ??????? {
?? ??? ????????? con.close();
?? ??? ??????? }
?? ??? ????? }
?? ??? ????? catch(SQLException ne)
?? ??? ????? {
?? ??? ??????? out.println("SQLException:"+ne);
?? ??? ????? }
?? ??? ??? }
?? ??? ?%>
?? ?</bdoy>
</html>
測試結果為:
=====================================
使用Proxool.jsp
從emp表中取出姓名SMITH
從emp表中取出姓名ALLEN
從emp表中取出姓名WARD
從emp表中取出姓名JONES
從emp表中取出姓名MARTIN
從emp表中取出姓名BLAKE
從emp表中取出姓名CLARK
從emp表中取出姓名SCOTT
從emp表中取出姓名KING
從emp表中取出姓名TURNER
從emp表中取出姓名ADAMS
從emp表中取出姓名JAMES
從emp表中取出姓名FORD
從emp表中取出姓名MILLER
從emp表中取出姓名feiyang
從emp表中取出姓名yang
從emp表中取出姓名feifei
從emp表中取出姓名fei