在數據庫應用程序上使用連接池(Proxool)

在數據庫應用程序中,數據庫連接的取得是一個耗費時間的動作,為了避免花費時間在連接的取得與關閉上,我們會將連接資源放置在一個池中,需要連接時就從池中取得,不需要連接時就將之放回池中,以求重復利用連接,連接池也擔任連接數量、連接時間的控制等動作。

         常常,我們在web應用中,會遇到連接沒有關閉導至too many connection的現象。這跟我們寫的程序有關,但另一方面也跟連接池有關。網上的資料顯示,apache的DBCP網上的評價不是很高。而Proxool網上很多人對它的評價是非常好的。所以值得試試。還有一個評價也是非常好的,那就是Hibernate包下有一個叫c3p的。因為有了這些開源包,我們就省去了寫連接池程序的麻煩,不要重復的發明輪子。而且現在Proxool也比較成熟了。目前的最新版本是:proxool-0.9.0RC2.jar

        他的配置使用非常簡單。
        參考了網上的資料。

        1、把下載下來的proxool-0.9.0RC2.jar放到web的lib中,同時也別忘了加入jdbc的驅動。

        2、在WEB-INF中加一個Proxool.xml配置文件。當然也可以用其它的配置,只是我覺得用xml進行配置比較好一點。內容如下:

  <?xml version="1.0" encoding="UTF-8"?>
<proxool>
  <alias>Develop</alias>
  <driver-url>
    jdbc:postgresql://127.0.0.1:5432/selldb
  </driver-url>
  <driver-class>
    org.postgresql.Driver
  </driver-class>
  <driver-properties>
    <property name="user" value="postgres"/>
    <property name="password" value="123456"/>
  </driver-properties>
  <maximum-connection-count>20</maximum-connection-count>
  <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>

       3、在web.xml中加上Servlet的配置,讓連接池應用程序一開始就執行。內容如下:

      <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>
 </servlet>

       4、寫一個程序來測試一下。

      
<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<html><head><title>Proxool.jsp</title></head><body><h2>使用Proxool.jsp</h2>
<%Connection con = null;
  Statement stmt = null;
  ResultSet rs = null;
  String po = "";
  try {
  con = DriverManager.getConnection("proxool.Develop");
 stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
 String query = "select * from sell_item";
 rs = stmt.executeQuery(query);
 while (rs.next()) {
  po = rs.getString("po");
%>
值<%=po%>
<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> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值