`
yeshaoting
  • 浏览: 684428 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[小结]Java数据库连接 - JNDI方式 - 配置Tomcat6.0 连接池

    博客分类:
  • J2SE
 
阅读更多

 

6. JNDI方式 - 配置Tomcat6.0 连接池

数据库连接池的基本思想就是为数据库连接建立一个缓冲池。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从缓冲池中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量,使用情况,为系统开发,测试及性能调整提供依据。

 

数据库连接池技术带来的优势:

a) 资源重用

由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。

 

b) 更快的系统响应速度

数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。

 

c) 新的资源分配手段

对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术,几年前也许还是个新鲜话题,对于目前的业务系统而言,如果设计中还没有考虑到连接池的应用,那么…….快在设计文档中加上这部分的内容吧。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。

 

d) 统一的连接管理,避免数据库连接泄漏

在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄漏。

 

 

一般步骤:

6.1 配置JNDI Resource

tomcat 5.5起数据库连接池的配置和以前的不同了,不推荐在server.xml中进行配置,

而是在%Tomcat_Home%\webapps\yourApp\META-INF\context.xml中进行配置才是更好的方法。

而不是以前版本%Tomcat_Home%\conf\context.xml文件。这样就可以在不同的web应用下单独配置连接池了,且Tomcat会自动重载。当然你也可以更改%Tomcat_Home%\conf下的context.xml文件,将所有web应用下的连接池进行统一配置。

 

因为server.xml是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而context.xml文件则不然,tomcat服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。

 

:这一步容易报错:Cannot create JDBC driver of class '' for connect URL 'null'

 

context.xml内容:

 

  <!-- The contents of this file will be loaded for each web application -->

    <Context>

        <Resource name="jdbc/db" auth="Container"

                         type="javax.sql.DataSource"

                         maxActive="30" maxIdle="10" maxWait="10000"

                         driverClassName="com.mysql.jdbc.Driver"

                         url="jdbc:mysql://localhost:3306/mydb"

                         username="root" password="root" />

        <WatchedResource>WEB-INF/web.xml</WatchedResource>

        <WatchedResource>WEB-INF/struts-config.xml</WatchedResource>

    </Context>

 

 

相关说明:

name      为当前数据源JNDI的名字,可以随意设定;

auth       为验证方式;

type       资源类型;

 

maxActiv     为连接池最大激活的连接数,设为0表示无限制;

maxIdle 为连接池最大空闲的连接数,数据库连接的最大空闲时间。超过空闲时间,

            数据库连接将被标记为不可用,然后被释放。设为0表示无限制;

maxWait       为连接最大的等待时间,单位毫秒,如果超过此时间将接到异常。设为-1表示无限制。;

 

driverClassName 为驱动引用;

url                 为连接数据库的连接地址;

username             为数据库的一个用户名;

password             username的密码;

 

<WatchedResource>标签内定义服务器在运行期监视的资源文件.服务器根据前后(修改)时间戳来判断是否发生修改,如若发生修改则重新加载该文件.

 

6.2 配置web.xml

关于这一步,貌似不是必须的,好像可以省略.

 

web.xml内容:

 

 <resource-ref>

   <description>DB Connection</description>

   <res-ref-name>jdbc/db</res-ref-name>

   <res-type>javax.sql.DataSource</res-type>

   <res-auth>Container</res-auth>

 </resource-ref>

 

注意: <res-ref-name>填写的内容要与在上文提到的JNDI Name名称一致,即与context.xml<Resource>标签的name属性值相同。虽然<res-type>标签内容虽然在<Resource>标签内容相同,但是是必不可少的.<res-auth>标签貌似可以省略,默认就是权限就是Container.

 

6.3 连接数据库进行登录验证

 

一般步骤:

a) 获取当前服务器加载的context内容.Context context = new InitialContext();

这里是第1步中提到的context内容.

加载优先顺序是:conf/server.xml<Resource>标签内容 -> conf/context.xml<Resource>标签内容 -> conf/Catalina/主机名(e.g. localhost)/项目名.xml

 

: conf/Catalina/主机名(e.g. localhost)/项目名.xmlTomcat布署时,由项目目录/WebRoot/META-INF/context.xml生成(Tomcat启动进行布署后,conf/Catalina/主机名(e.g. localhost)/项目名.xmlWebRoot/META-INF/context.xml内容一样,名字由context.xml变成项目名.xml).

 

b) 导入两个类包commons-dbcpcommons-pool(来自apache)

javax.sql.DataSource是一个接口,Tomcat采用commons-dbcp包中类org.apache.commons.dbcp.BasicDataBase作为其的实现类,或者说是实例创建类,还是关联在一起??(不了解过程,说不好).

 

Context ctx = new InitialContext();

DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/db");

或者

Context ctx = new InitialContext();

Context envCtx = (Context) ctx.lookup("java:comp/env");

DataSource ds = (DataSource) envCtx.lookup("jdbc/db");

 

关键代码:

 

    private static Connection conn;

    private static PreparedStatement stmt;

   

    if (conn == null || conn.isClosed())

    {

    String name = "java:comp/env/jdbc/db";

   

    Context context = new InitialContext();

    DataSource data = (DataSource) context.lookup(name);

   

    conn = data.getConnection();

    stmt = conn.prepareStatement(sql);

    }

 

分享到:
评论

相关推荐

    tomcat6.0数据库连接池驱动

    Tomcat 6.0数据库连接池驱动的使用,涉及到的主要知识点包括:数据库连接池的概念与作用,Tomcat内置的数据源实现(DBCP和C3P0),数据源的配置方法,JNDI的使用,以及在Java代码中获取和释放数据库连接。...

    Tomcat_6.0配置oracle数据库连接池

    总的来说,配置Tomcat 6.0的Oracle数据库连接池涉及修改`context.xml`,添加Oracle驱动到`lib`目录,并在Java代码中正确引用数据源。这一过程有助于提升应用程序对数据库操作的效率和稳定性。请注意,实际生产环境中...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置!.pdf

    Tomcat服务器是Apache软件基金会...通过上述配置步骤,Tomcat6.0服务器能够与MyEclipse6.0开发环境和mysql5.0数据库协同工作,实现一个高效稳定的数据库连接池,从而提高应用程序处理数据库操作的性能和扩展性。

    tomcat6.0 配置jndi

    在Tomcat6.0中配置JNDI,主要是为了实现应用中的数据源管理,使得多个应用可以共享一个数据库连接池,提高资源利用率和系统性能。 **一、JNDI的基本概念** JNDI提供了一个统一的接口,让开发者可以查找和绑定各种...

    tomcat6.0配置sql2005数据库连接池.doc

    配置数据库连接池是为了优化数据库连接的创建和管理,提高应用性能。 【描述】中的知识点:配置连接池可以避免频繁地创建和关闭数据库连接,减少系统资源消耗,尤其在高并发环境下至关重要。Tomcat的`context.xml`...

    TOMCAT6.0配置数据库连接池

    ### TOMCAT6.0配置数据库连接池的知识点详解 #### 一、连接池的基本概念与配置 **背景介绍** 在Web应用开发中,数据库连接管理是至关重要的环节之一。为了提高应用程序性能并优化资源利用,通常会使用数据库连接池...

    JNDI数据库连接池

    在Tomcat 6.0这个流行的Java Servlet容器中,JNDI被用来配置和管理应用的数据库连接池。Tomcat支持多种数据库连接池实现,如Apache DBCP、C3P0以及HikariCP等。这些连接池通过JNDI服务注册到Tomcat的Context环境中,...

    tomcat6.0连接通过JNDI连接mysql实例

    在上面的配置中,我们定义了一个名为 `jdbc/JNDIDatabase` 的 JNDI 资源,该资源是一个数据库连接池,使用 `com.mysql.jdbc.Driver` 驱动程序连接到 `localhost:3306` 的 MySQL 实例。 使用 JNDI 资源 在 Java ...

    tomcat6.0 数据源配置

    标题“Tomcat6.0数据源配置”涉及的是在Apache Tomcat 6.0版本中设置和管理数据库连接池的过程。Tomcat作为一个流行的开源Java应用服务器,提供了多种数据源配置方式,以支持Web应用程序高效、安全地访问数据库。在...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置![参考].pdf

    总之,配置Tomcat 6.0、MyEclipse 6.0和MySQL 5.0的数据连接池涉及的主要知识点包括:Tomcat的`context.xml`配置、`web.xml`的资源引用、JNDI查找以及MySQL JDBC驱动的添加。正确配置后,应用程序将能高效地管理和...

    tomcat6.0+oracle数据库连接池

    本篇文章将深入探讨如何在Tomcat 6.0应用服务器上配置Oracle数据库连接池,以及如何使用第三方DBCP(Database Connection Pool)库来实现这一目标。DBCP是一个开源的Java连接池实现,它为应用程序提供了一种有效管理...

    tomcat6.0中配置JNDI的DBCP连接

    在Java应用服务器中,如Tomcat 6.0,配置JNDI(Java Naming and Directory Interface)的DBCP(Database Connection Pool)连接池是管理数据库连接的重要步骤。JNDI是一个标准接口,允许应用程序查找和访问命名服务...

    tomcat数据库连接池配置

    &lt;title&gt;Tomcat6.0 JNDI Test This is my JSP page. JNDI lookup test starts (); Context envContext = (Context)ctx.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup(...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置![借鉴].pdf

    在本文中,我们将详细探讨如何配置Tomcat 6.0、MyEclipse 6.0以及MySQL 5.0的数据库连接池。首先,我们理解这个配置过程的重要性,因为一个有效的数据库连接池管理能提高应用的性能和资源利用效率。 **配置步骤** ...

    Tomcat6.0配置JNDI数据源完整例子(5.5与此配置相同)

    标题中的“Tomcat6.0配置JNDI数据源完整例子”是指在Apache Tomcat 6.0服务器中设置Java Naming and Directory Interface (JNDI)数据源的过程。JNDI是一个API,它允许应用程序查找和使用命名服务,如数据库连接池。...

    Tomcat6.0 JNDI数据源经典实例

    `name`属性是JNDI名称,`auth`表示认证方式,`type`指定了数据源类型,`driverClassName`是数据库驱动类,`url`是数据库连接地址,`username`和`password`是数据库登录凭证,最后`maxActive`, `maxIdle`和`maxWait`...

    Java数据库连接池

    在Tomcat 6.0中配置数据库连接池,通常有以下步骤: 1. **配置context.xml文件**:在`$CATALINA_HOME/conf/context.xml`中添加连接池的配置信息。例如,对于Oracle数据库,可以设置`&lt;Resource&gt;`标签,包括数据库...

    tomcat6.0文件 有連接池配置的

    总的来说,Tomcat 6.0的连接池配置是提高Web应用性能的重要一环,通过合理配置可以有效提升系统效率,减少数据库负载,并提供更稳定的服务。在实际操作中,要根据应用的负载情况和数据库的特性进行适当的调整,以...

Global site tag (gtag.js) - Google Analytics