`
fqmly520
  • 浏览: 64583 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Jakarta的公共连接池实现 - BasicDataSource

阅读更多
|


Jakarta的公共连接池实现 - BasicDataSource    
              如果你的手头没有连接池的本地(native)实现,你可以使用Jakarta提供的公共连接池实现[org.apache.commons.dbcp.BasicDataSource],它可以和DataSource管理器"合作"的很好。另外,Struts还在它的util包里包含了一个GenericDataSource类,这也是一个连接池实现。但是这只是一个非常简单的实现方案,不推荐使用,因为它可能在Struts的以后版本中被BasicDataSource或其它的数据源实现替换掉。

  下面是一段Struts-config.xml配置文件中的数据源配置(使用GenericDataSource数据源实现),你可以更改相应的设置以适合你自己的系统。



<!-- configuration for GenericDataSource wrapper -->
<data-sources>
         <data-source>
           <set-property
                 property="autoCommit"
                 value="false"/>
           <set-property
                 property="description"
                 value="Example Data Source Configuration"/>
           <set-property
                 property="driverClass"
                 value="org.postgresql.Driver"/>
           <set-property
                 property="maxCount"
                 value="4"/>
           <set-property
                 property="minCount"
                 value="2"/>
           <set-property
                 property="password"
                 value="mypassword"/>
           <set-property
                 property="url"
                 value="jdbc:postgresql://localhost/mydatabase"/>
           <set-property
                 property="user"
                 value="myusername"/>
         </data-source>
</data-sources>

使用BasicDataSource数据源实现的配置方案如下:

<data-sources>
        <!-- configuration for commons BasicDataSource -->
        <data-source type="org.apache.commons.dbcp.BasicDataSource">
                <set-property
                  property="driverClassName"
                  value="org.postgresql.Driver" />
                <set-property
                  property="url"
                  value="jdbc:postgresql://localhost/mydatabase" />
                <set-property
                  property="username"
                  value="me" />
                <set-property
                  property="password"
                  value="test" />
                <set-property
                  property="maxActive"
                  value="10" />
                <set-property
                  property="maxWait"
                  value="5000" />
                <set-property
                  property="defaultAutoCommit"
                  value="false" />
                <set-property
                  property="defaultReadOnly"
                  value="false" />
                <set-property
                  property="validationQuery"
                  value="SELECT COUNT(*) FROM market" />
        </data-source>
</data-sources>

  注意,你可以在你的应用系统中定义不止一个数据源,你可以根据需要定义多个数据源,并为它们分别起一个逻辑名(logical name)。这样做可以给你的应用系统提供更好的安全性和可测量性(scalability),你还可以定义一个专用于测试的数据源。

  配置好DataSource以后,你就可以在你的应用系统中使用这些数据源了。下面这段代码演示了怎样在Action类的execute方法中通过这些数据源来生成数据库连接。

public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response)
        throws Exception
{
        DataSource dataSource;
        Connection cnn;

        try
        {
                dataSource = getDataSource(request);
                cnn = dataSource.getConnection();
                // 数据连接已经建立了,你可以做你想做的事情了
        }
        catch (SQLException e)
        {
                getServlet().log("处理数据库连接", e);
        }
        finally
        {
                // 在finally块里包含这些代码
                // 用以保证连接最后会被关闭
                try
                {
                        cnn.close();
                }
                catch (SQLException e)
                {
                        getServlet().log("关闭数据库连接", e);
                }
        }
}

  注意:如果你使用公共的BasicDataSource,你提供给pingQuery属性的查询语句(如果你设置了话)必须至少要能返回一行记录。

例子:SELECT COUNT(*) FROM VALIDTABLE

你可以把VALIDTABLE替换成你的数据库中包含的任何有效的表。

[使用多个数据源]

如果你需要在模块(Module)中使用多于一个的数据源,你可以在配置文件的<data-source>元素里包含一个key属性。

<data-source>
        <data-source key="A" type="org.apache.commons.dbcp.BasicDataSource">
                …属性配置略, 同上…
        </data-source>
        <data-source key="B" type="org.apache.commons.dbcp.BasicDataSource">
                …属性配置略, 同上…
        </data-source>
</data-source>

你代码里,你可以通过这些key获得不同的数据源。代码如下:


try
{
        dataSourceA = getDataSource(request, "A");
        dataSourceB = getDataSource(request, "B");


你可以根据需要为每一个模块设置多个数据源。但同一模块里每个数据源的key属性必须唯一,因为Struts模块系统是以每一个模块为单位管理命名空间的。

[更多的内容请参考:]

http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24621.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24709.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24626.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24331.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24102.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23501.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23455.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23375.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23321.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23098.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg22713.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg21974.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg21026.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg19338.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg18323.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg14975.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg14914.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg14435.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg01562.html

转换/数据传递(Transformation/Data Transfer)
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24480.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23623.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg10195.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg10205.html

[提供动态结果集(dynamic result set)]

  大多数的数据库查询结果都会跟你的已经使用的ActionForms一一对应,你只需要把你的查询结果集合提交给相应的ActionForm就可以了。但有时候,结果集(ResultSet)里有些字段并不是ActionForm的属性,或者更糟。

  幸运的是,Struts的自定义标签集并不关心你传递给他们的bean类型。你甚至可以直接输出结果集。但是由于结果集会一直保持着与数据库的连接,并且由于它们把所有的数据都直接传递给了JSP,使得页面变得零乱不堪。那么我们该怎么做呢?

从Struts 1.1开始,你可以使用新增加的ResultSetDynaClass来把你的结果集转换成一个DynaBeans的ArrayList。Struts自定义标签集可以像一般的JavaBean一样使用DynaBean的属性。(关于DynaActionForm类更详细的信息,请参考Struts用户手册)。

  ResultSetDynaClass类已经包含在于BeanUtils.jar包中,所以你现在所要做的,只需要拿出这个工具,实现自己的传递方案吧…………


在tomcat的server.xml里面配置数据源,配置如下:

server.xml

<Context path="/acb" docBase="e:/eclipse/workspace/acb" debug="2" reloadable="false" crossContext="true">

   <Resource name="jdbc/acb"
        auth="Container"
        type="javax.sql.DataSource"/>
  
   <ResourceParams name="jdbc/acb">
       <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
       </parameter>

       <parameter>
      <name>maxActive</name>
      <value>100</value>
       </parameter>

       <parameter>
      <name>maxIdle</name>
      <value>30</value>
       </parameter>

       <parameter>
      <name>maxWait</name>
      <value>10000</value>
       </parameter>

       <parameter>
     <name>username</name>
     <value>sa</value>
       </parameter>

       <parameter>
     <name>password</name>
     <value>pass</value>
       </parameter>

       <parameter>
       <name>driverClassName</name>
       <value>net.sourceforge.jtds.jdbc.Driver</value>
       </parameter>

       <parameter>
      <name>url</name>
      <value>jdbc:jtds:sqlserver://10.2.146.71:1433;DatabaseName=agri_buissness;SelectMethod=cursor</value>
       </parameter>
    </ResourceParams>
  </Context>

程序中调用的代码如下:

Context initctx = new InitialContext();
    Object obj = initctx.lookup(IgenFlowStatic.conJndi);
    dataSource =(DataSource)obj;

配置文件中:

<property name="con.jndi" value="java:comp/env/jdbc/acb"/>

分享到:
评论

相关推荐

    连接池案例 连接池案例

    2. DBCP (Apache BasicDataSource):Apache的数据库连接池,基于Jakarta-pool,相对简单易用。 3. HikariCP:高性能的连接池,设计目标是提供最小的延迟和最佳的性能。 4. Druid:阿里巴巴开源的数据库连接池,集成...

    java 数据库 连接池驱动.rar

    - DBCP (Apache BasicDataSource):Apache的一个开源项目,基于Jakarta Pool实现,它是Tomcat默认的数据库连接池。 - HikariCP:高性能的连接池,设计目标是提供最小的延迟和最大吞吐量,被认为是目前最快的Java...

    数据库连接池-jar包

    2. **DBCP (Apache Commons DBCP)**:Apache提供的另一个连接池实现,它是基于Jakarta-DBCP的,实现了BasicDataSource接口。使用DBCP,你需要引入`commons-dbcp.jar`和`commons-pool.jar`。 3. **HikariCP**:这是...

    java实现连接池

    Java实现连接池是一种提高数据库操作效率的技术,它通过管理和重用数据库连接,避免了频繁创建和销毁连接导致的性能开销。在Java中,我们通常使用第三方库来实现连接池,如Apache的DBCP、C3P0,或者更现代的HikariCP...

    数据库连接池的三种实现方法

    在Java开发中,有三种常见的数据库连接池实现:DBCP(BasicDataSource)、C3P0以及阿里开源的Druid。下面将详细介绍这三种数据库连接池的实现原理和特性。 1. **DBCP (BasicDataSource)** DBCP 是 Apache Commons ...

    03-数据库连接池驱动_数据库连接池;驱动_

    再者,DBCP(BasicDataSource)是Apache Commons DBCP项目的一部分,它是基于Jakarta-Commons-Pool的数据库连接池实现。DBCP提供了基本的连接池功能,如连接池大小控制、空闲连接检测等。相对于C3P0和Druid,DBCP...

    一个Demo小例子让你了解数据库连接池实现的4种方式

    它基于Jakarta POOL对象池,提供了基本的数据库连接池功能。与C3P0相比,DBCP的配置相对简单,但可能在性能和稳定性上稍逊一筹。在应用中,我们可以通过BasicDataSource类来配置和管理数据库连接。 3. **HikariCP**...

    三大连接池常用jar(c3p0,dbcp,druid)

    - 提供两种连接池实现:BasicDataSource和PoolableDataSource,满足不同需求。 - 支持JNDI查找,便于在应用服务器中部署。 - 内置异常检测机制,可以自动回收无效连接。 - 支持设置最大空闲时间,避免资源浪费。 3....

    Struts配置数据库连接池

    2. **Jakarta公共连接池实现**:如果当前使用的环境没有内置的连接池实现,可以考虑使用Jakarta提供的公共连接池实现——`BasicDataSource`。 - **优点**:`BasicDataSource`不仅易于配置,而且兼容性良好,可以...

    dbcp.rar数据库连接池工具包

    DBCP提供了两种主要的连接池实现:BasicDataSource和PoolableDataSource。 1. BasicDataSource:这是DBCP的基础数据源实现,它实现了javax.sql.DataSource接口。它允许开发者配置诸如最大连接数、初始化连接数、...

    利用dbcp实现数据库连接池

    DBCP(Jakarta DBCP)是Apache软件基金会提供的一个开源数据库连接池实现,它基于Jakarta Commons Pool对象池机制,提供了一种有效管理数据库连接的方式。 在Java应用程序中,频繁地创建和关闭数据库连接会消耗大量...

    DBCP连接池的jar包

    DBCP(Database Connection Pool)是Apache组织提供的一种开源数据库连接池实现,全称为"Jakarta DBCP"。它基于Java编写,旨在提高数据库访问效率,通过复用已存在的数据库连接,减少创建和销毁数据库连接时的开销,...

    自定义JDBC连接池及常用连接池介绍

    2. DBCP (Apache BasicDataSource):Apache Commons DBCP是Apache组织提供的一个基于Jakarta POI项目中的DBCP库,它是JDBC连接池的一种实现,提供了基本的数据源类和驱动管理。 3. HikariCP:这是目前被认为是性能...

    连接池应用

    2. DBCP(Apache BasicDataSource):Apache的一个基础数据库连接池实现,基于Jakarta-pool,它是Tomcat等服务器默认的连接池。 3. HikariCP:一款高性能的数据库连接池,它的设计目标是提供最小的资源消耗和最快的...

    java hibernate中各种连接池比较

    Java Hibernate 中的各种连接池在应用程序开发中扮演着关键角色,它们负责管理数据库连接,提高性能并减少资源消耗。本文将对比分析三个常见的开源数据连接池:C3P0、DBCP 和 Proxool,并深入探讨它们的主要参数和...

    DBCP(数据库连接池)

    DBCP,全称为Jakarta-Commons-DBCP,是一个基于Apache组织开发的开源数据库连接池组件。在Java应用程序中,DBCP可以帮助管理和优化数据库连接,提高应用性能和资源利用率。数据库连接池在多线程环境下尤其重要,因为...

    java连接池 beta v1

    - DBCP(Apache BasicDataSource):Apache的一个开源项目,基于Jakarta POI的数据库连接池。 - HikariCP:被誉为最快的Java连接池,设计目标是提供零成本的高性能,以及优秀的JMX监控功能。 - Druid:阿里巴巴开源...

    数据库连接池

    1. DBCP(BasicDataSource):Apache的基础数据源,它是Jakarta Commons Pool和Jakarta Commons Database Connectivity的结合,提供了基本的连接池功能。DBCP的配置项包括最大活动连接数、最小空闲连接数、超时时间...

    数据库连接池DBCP,jar包

    DBCP(Jakarta DBCP)是Apache软件基金会的一个开源项目,它基于Jakarta Commons库,为多种数据库提供了连接池实现。 在Java中,数据库连接通常通过JDBC(Java Database Connectivity)API来实现。JDBC允许Java程序...

Global site tag (gtag.js) - Google Analytics