Connection Pool (2)

Connection Pool (2)

(史帝芬, idealist@gcn.net.tw, 2003/12/19)

第一種建立Connection Pool的作法基本上是由Programmer自己寫,現在要介紹另一種作法,透過JNDI可以更簡單做出來,而且程式的寫法可以完全和使用何種資料庫無關。下面的程式範例將以Tomcat 4.1.27和Oracle 9i為例。
  • Copy library到Tomcat
    classes12.jarnls_charset12.jar copy到%Tomcat%/common/lib

  • 設定server.xml
    在%Tomcat%/conf裡找到server.xml,然後在裡面加上下面這段設定。
    <DefaultContext crossContext="true" reloadable="true">
    <Resource auth="Container" name="jdbc/epmp" scope="Shareable" type="javax.sql.DataSource"/>
    <ResourceParams name="jdbc/epmp">
    <parameter>
     <name>url</name>
     <value>jdbc:oracle:thin:@hostname:1521:SID</value>
    </parameter>
    <parameter>
     <name>driverClassName</name>
     <value>oracle.jdbc.driver.OracleDriver</value>
    </parameter>
    <parameter>
     <name>username</name>
     <value>user</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>pwd</value>
    </parameter>
    </ResourceParams>
    </DefaultContext>

  • 設定web.xml
    如圖1設定JNDI的參照,設定好之後將可以在web.xml中發現WSAD為我們加入的內容。
    <resource-ref>
    	<res-ref-name>jdbc/epmp</res-ref-name>
    	<res-type>javax.sql.DataSource</res-type>
    	<res-auth>CONTAINER</res-auth>
    	<res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    

    圖1

  • 範例程式
    Context ctx;
    Connection conn = null;
    ResultSet rs = null;

    try {
     ctx = new InitialContext();
     DataSource ds = (DataSource)  ctx.lookup("java:comp/env/jdbc/epmp");
     conn = ds.getConnection();

     //Do something...

    } catch (NamingException e) {
     e.printStackTrace();
    } catch (SQLException e) {
     e.printStackTrace();
    }
    finally {
     try {
      conn.close();
     } catch (SQLException e1) {
      e1.printStackTrace();
     }
     conn = null;
    }

  • SQL Server 2000 (2005.04.16 補充)
    如果資料庫換成SQL Server 2000,則將server.xml中的設定url和driverClassName換成如下即可…
    <parameter>
       <name>driverClassName</name>
       <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
    </parameter>
    
    <parameter>
      <name>url</name>
      <value>jdbc:microsoft:sqlserver://hostname:1433;DatabaseName=dbXXX</value>
    </parameter>
    
`ConnectionPool`是Redis官方Python客户端redis-py中的一个类,用于管理Redis客户端连接的连接池。通过连接池,我们可以避免每次操作Redis时都重新建立连接,从而提高Redis的性能和可靠性。具体来说,连接池可以做到以下几点: 1. 连接复用:在连接池中,Redis客户端连接是被重复使用的,不需要每次操作都重新连接Redis服务器,从而节省了连接建立和断开的时间和资源。 2. 连接管理:连接池可以管理连接的创建、销毁、空闲等状态,以便于更好地控制连接的数量和状态,防止连接过多或者过少。 3. 连接可靠性:连接池可以通过心跳机制、重连机制等方式保证连接的可靠性,防止连接丢失或者超时。 在使用redis-py进行Redis操作时,我们通常会先创建一个`ConnectionPool`对象,然后通过该对象创建一个`Redis`对象,最终使用`Redis`对象来执行Redis操作。例如: ```python import redis pool = redis.ConnectionPool(host='localhost', port=6379, db=0) r = redis.Redis(connection_pool=pool) r.set('foo', 'bar') print(r.get('foo')) ``` 在上面的代码中,我们先创建了一个连接池对象`pool`,指定了Redis服务器的地址、端口和数据库编号。然后我们通过`pool`对象创建了一个Redis客户端对象`r`,并使用`set()`方法向Redis服务器中写入了一个键值对。最后我们使用`get()`方法读取Redis服务器中的数据,并打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值