使用proxool數據庫連接池步驟:
在WEB-INF的lib中導入proxool-0.9.0RC3.jar
在WEB-INF中新建一個XML文件,取名爲proxool.xml
在proxool.xml中的內容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- the proxool configuration can be embedded within your own application's. Anything outside the "proxool"
- tag is ignored.
- -->
- <something-else-entirely>
- <proxool>
- <alias>smms</alias> <!--數據源的別名-->
- <driver-url>jdbc:mysql://127.0.0.1:3306/smms</driver-url><!--url連接串-->
- <driver-class>com.mysql.jdbc.Driver</driver-class><!--驅動類-->
- <driver-properties>
- <property name="user" value="root" /><!--用戶名-->
- <property name="password" value="root" /><!--密碼-->
- </driver-properties>
- <!--最大連接數(默認 5個),超過了這個連接數,再有請求時,就排在隊列中等候,最大的等待請求數由
- maximum-new-connections決定-->
- <maximum-connection-count>100</maximum-connection-count>
- <!--最小連接數(默認2個)-->
- <minimum-connection-count>10</minimum-connection-count>
- <!--proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閒的連接就馬上回收,超時的銷燬 默
- 認30秒-->
- <house-keeping-sleep-time>90000</house-keeping-sleep-time>
- <!--沒有空閒連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受-
- ->
- <maximum-new-connections>10</maximum-new-connections>
- <!--最少保持的空閒連接數(默認2個)-->
- <prototype-count>5</prototype-count>
- <!--在使用之前測試-->
- <test-before-use>true</test-before-use>
- <!--用於保持連接的測試語句 -->
- <house-keeping-test-sql>select id from t_sysadmin</house-keeping-test-sql>
- </proxool>
- </something-else-entirely>
在web.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/proxool.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- t;/servlet>
數據庫操作類如下:
- package cn.edu.hbcit.smms.dao.databasedao;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import org.apache.log4j.Logger;
- import org.logicalcobwebs.proxool.ProxoolException;
- import org.logicalcobwebs.proxool.ProxoolFacade;
- import org.logicalcobwebs.proxool.admin.SnapshotIF;
- /**
- * 數據庫操作類
- * @author lw
- *
- */
- public class DBConn {
- private static Connection conn;
- private static ResultSet rs;
- private static PreparedStatement ps;
- private static String driverClass = "org.logicalcobwebs.proxool.ProxoolDriver";//proxool驅動類
- //private static String url = "jdbc:mysql://localhost:3306/bbs?user=root&password=123";
- private static int activeCount = 0; //活動連接數
- protected final Logger log = Logger.getLogger(DBConn.class.getName());
- /**
- * 獲取數據庫連接
- * @return Connection
- */
- public Connection getConn() {
- try {
- Class.forName(driverClass);
- conn = DriverManager.getConnection("proxool.smms"); //此處的smms是在proxool.xml中配置的連接池別名
- this.showSnapshotInfo(); //查看連接池信息
- } catch (Exception e) {
- log.error(e.getMessage());
- log.debug("數據庫連接錯誤!");
- //System.out.println(e.getMessage());
- //System.out.println("數據庫連接錯誤!");
- }
- return conn;
- }
- /**
- * 釋放連接
- * freeConnection
- * @param conn
- */
- public void freeConnection(Connection conn){
- if(conn!=null){
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * 獲取連接池中的連接信息
- */
- private void showSnapshotInfo(){
- try{
- SnapshotIF snapshot = ProxoolFacade.getSnapshot("smms", true);
- int curActiveCount=snapshot.getActiveConnectionCount();//獲得活動連接數
- int availableCount=snapshot.getAvailableConnectionCount();//獲得可得到的連接數
- int maxCount=snapshot.getMaximumConnectionCount() ;//獲得總連接數
- if(curActiveCount!=activeCount)//當活動連接數變化時輸出的信息
- {
- log.debug("活動連接數:"+curActiveCount+"(active);可得到的連接數:"+availableCount+"(available);總連接數:"+maxCount+"(max)");
- //System.out.println("活動連接數:"+curActiveCount+"(active);可得到的連接數:"+availableCount+"(available);總連接數:"+maxCount+"(max)");
- activeCount=curActiveCount;
- }
- }catch(ProxoolException e){
- e.printStackTrace();
- }
- }
- }