歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java Web中使用數據庫連接池proxool配置詳解

Java Web中使用數據庫連接池proxool配置詳解

日期:2017/3/1 10:14:44   编辑:Linux編程

使用proxool數據庫連接池步驟:

在WEB-INF的lib中導入proxool-0.9.0RC3.jar
在WEB-INF中新建一個XML文件,取名為proxool.xml
在proxool.xml中的內容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. the proxool configuration can be embedded within your own application's. Anything outside the "proxool"
  4. tag is ignored.
  5. -->
  6. <something-else-entirely>
  7. <proxool>
  8. <alias>smms</alias> <!--數據源的別名-->
  9. <driver-url>jdbc:mysql://127.0.0.1:3306/smms</driver-url><!--url連接串-->
  10. <driver-class>com.mysql.jdbc.Driver</driver-class><!--驅動類-->
  11. <driver-properties>
  12. <property name="user" value="root" /><!--用戶名-->
  13. <property name="password" value="root" /><!--密碼-->
  14. </driver-properties>
  15. <!--最大連接數(默認 5個),超過了這個連接數,再有請求時,就排在隊列中等候,最大的等待請求數由
  16. maximum-new-connections決定-->
  17. <maximum-connection-count>100</maximum-connection-count>
  18. <!--最小連接數(默認2個)-->
  19. <minimum-connection-count>10</minimum-connection-count>
  20. <!--proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閒的連接就馬上回收,超時的銷毀 默
  21. 認30秒-->
  22. <house-keeping-sleep-time>90000</house-keeping-sleep-time>
  23. <!--沒有空閒連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受-
  24. ->
  25. <maximum-new-connections>10</maximum-new-connections>
  26. <!--最少保持的空閒連接數(默認2個)-->
  27. <prototype-count>5</prototype-count>
  28. <!--在使用之前測試-->
  29. <test-before-use>true</test-before-use>
  30. <!--用於保持連接的測試語句 -->
  31. <house-keeping-test-sql>select id from t_sysadmin</house-keeping-test-sql>
  32. </proxool>
  33. </something-else-entirely>

在web.xml中添加以下節點:

  1. <servlet>
  2. <servlet-name>ServletConfigurator</servlet-name>
  3. <servlet-class>
  4. org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
  5. <init-param>
  6. <param-name>xmlFile</param-name>
  7. <param-value>WEB-INF/proxool.xml</param-value>
  8. </init-param>
  9. <load-on-startup>1</load-on-startup>
  10. t;/servlet>

數據庫操作類如下:

  1. package cn.edu.hbcit.smms.dao.databasedao;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import org.apache.log4j.Logger;
  8. import org.logicalcobwebs.proxool.ProxoolException;
  9. import org.logicalcobwebs.proxool.ProxoolFacade;
  10. import org.logicalcobwebs.proxool.admin.SnapshotIF;
  11. /**
  12. * 數據庫操作類
  13. * @author lw
  14. *
  15. */
  16. public class DBConn {
  17. private static Connection conn;
  18. private static ResultSet rs;
  19. private static PreparedStatement ps;
  20. private static String driverClass = "org.logicalcobwebs.proxool.ProxoolDriver";//proxool驅動類
  21. //private static String url = "jdbc:mysql://localhost:3306/bbs?user=root&password=123";
  22. private static int activeCount = 0; //活動連接數
  23. protected final Logger log = Logger.getLogger(DBConn.class.getName());
  24. /**
  25. * 獲取數據庫連接
  26. * @return Connection
  27. */
  28. public Connection getConn() {
  29. try {
  30. Class.forName(driverClass);
  31. conn = DriverManager.getConnection("proxool.smms"); //此處的smms是在proxool.xml中配置的連接池別名
  32. this.showSnapshotInfo(); //查看連接池信息
  33. } catch (Exception e) {
  34. log.error(e.getMessage());
  35. log.debug("數據庫連接錯誤!");
  36. //System.out.println(e.getMessage());
  37. //System.out.println("數據庫連接錯誤!");
  38. }
  39. return conn;
  40. }
  41. /**
  42. * 釋放連接
  43. * freeConnection
  44. * @param conn
  45. */
  46. public void freeConnection(Connection conn){
  47. if(conn!=null){
  48. try {
  49. conn.close();
  50. } catch (SQLException e) {
  51. e.printStackTrace();
  52. }
  53. }
  54. }
  55. /**
  56. * 獲取連接池中的連接信息
  57. */
  58. private void showSnapshotInfo(){
  59. try{
  60. SnapshotIF snapshot = ProxoolFacade.getSnapshot("smms", true);
  61. int curActiveCount=snapshot.getActiveConnectionCount();//獲得活動連接數
  62. int availableCount=snapshot.getAvailableConnectionCount();//獲得可得到的連接數
  63. int maxCount=snapshot.getMaximumConnectionCount() ;//獲得總連接數
  64. if(curActiveCount!=activeCount)//當活動連接數變化時輸出的信息
  65. {
  66. log.debug("活動連接數:"+curActiveCount+"(active);可得到的連接數:"+availableCount+"(available);總連接數:"+maxCount+"(max)");
  67. //System.out.println("活動連接數:"+curActiveCount+"(active);可得到的連接數:"+availableCount+"(available);總連接數:"+maxCount+"(max)");
  68. activeCount=curActiveCount;
  69. }
  70. }catch(ProxoolException e){
  71. e.printStackTrace();
  72. }
  73. }
  74. }
Copyright © Linux教程網 All Rights Reserved