设为首页 收藏本站
查看: 457|回复: 0

[经验分享] 使用Tomcat-5.5.20配置数据库连接池详细介绍

[复制链接]

尚未签到

发表于 2017-2-9 08:38:47 | 显示全部楼层 |阅读模式
  本文旨在给程序开发人员提供一个比较具体的Tomcat连接池参考方案,为了提高文章的可读性,文章前端引用了一位前辈的话,如果构成误解,请多多谅解,本文不是从商业考虑的。有问题请联系作者MSN:hpj2001(at)hotmail.com,Email:tocow(at)google.com。

连接池简介
   程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。
      数据库连接池(connection pool)的工作原理:
      由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。
对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配、释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发、测试及性能调整提供依据。
一、Tomcat一般性说明
1、本压缩包内的tomcat为apache-tomcat-5.5.20,截止到2006-10-12,是www.apache.org上最新的tomcat版本。
2、Tomcat使用的端口都是默认的。两个比较重要的端口说明,shutdown port:8005;non-SSL HTTP/1.1 Connector port:8080。
3、涉及到修改的文件:
   a../ conf下server.xml、web.xml
   b../common/lib下增加ms-sql jdbc的三个jar包msbase.jar、mssqlserver.jar、msutil.jar
二、Tomcat配置连接池方案
       本文针对的是tomcat 5.5版本的连接池介绍,其它版本可能不适用。
       数据源可以配置成全局的和局部的:可以在任意Context中引用全局的数据源,在某一Context配置的数据源,不能在其它Context引用它。理解了全局和局部数据源的关系,下面就来介绍一下详细配置说明,如下:
1、编辑打开./confCatalina/localhost/gdczsam.xml可以看到:
<!--F hpj 2006-10-12 
    Defualt, we set all different Resources as Global-Resource[which defined in server.xml <GlobalNamingResources></GlobalNamingResources>], 
    and get special Resource we needed in per-web-application contexts from Global-Resource.
    otherwise,we can set Resource we needed in any special Context, all two solutions are offered.

    A.during application development set reloadable="true", when deployed production set reloadable="false"

    B.many other datebase, url and driverClassName like underside list:
      1.ms-sql       driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                     url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"

      2.oracle       driverClassName="oracle.jdbc.driver.OracleDriver"
                     url="jdbc:oracle:thin:@127.0.0.1:1521:SAM_GDCZ"

      3.postgresql   driverClassName="org.postgresql.Driver"
                     url="jdbc:postgresql://127.0.0.1:5432/SAM_GDCZ"

      4.mysql        driverClassName="org.gjt.mm.mysql.Driver"[old mySql jdbc driver]
                     driverClassName="com.mysql.jdbc.Driver"
                     url="jdbc:mysql://127.0.0.1:3306/SAM_GDCZ"
-->

<Context docBase="setup directory" path="/gdczsam" reloadable="true" cookies="true" crossContext="true" privileged="true" antiResourceLocking="false" antiJARLocking="false">

<!--
    <Resource name="jdbc/mssql-SAM_GDCZ"
              auth="Container"
                type="javax.sql.DataSource"
                driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
                username="sa"
                password=""
                maxIdle="30"
                maxWait="10000"
                maxActive="100"/>
-->

<!--F hpj 2006-10-12 
    name: The name of the resource link to be created, which will be used in this web-application context environment.
    global: The name of the linked global resource in the global JNDI context.
    type: The fully qualified Java class name expected by the web application when it performs a lookup for this resource link.
-->
   <ResourceLink name="mssql-SAM_GDCZ" global="jdbc/mssql-SAM_GDCZ" type="javax.sql.DataSource"/>

</Context>
         本文提供的tomcat连接池的默认配置如上述,代码的说明性很强,既采用在./ conf/server.xml配置的全局数据源,然后在指定的Context中调用的方式。
         server.xml中的数据源就是上述代码段注释的Resource节点,被包含在server.xml中的GlobalNamingResources节点中。
         其中需要注意的是,该数据源需要在./conf/web.xml中加入一段声明,如下:
    <resource-ref>
        <descrīption>DB Connection</descrīption>
        <res-ref-name>jdbc/mssql-SAM_GDCZ</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
2、第二种tomcat数据源的配置方式是本人推荐的:不在server.xml的GlobalNamingResources节点中加入Resource节点,而是对每个指定的Context配置数据源,这样结构比较清晰。采用这种方式的gdczsam.xml配置如下:
<Context docBase="setup directory" path="/gdczsam" reloadable="true" cookies="true" crossContext="true" privileged="true" antiResourceLocking="false" antiJARLocking="false">

    <Resource name="jdbc/mssql-SAM_GDCZ"
             auth="Container"
                type="javax.sql.DataSource"
                driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
                username="sa"
                password=""
                maxIdle="30"
                maxWait="10000"
                maxActive="100"/>

</Context>
3、以上两种方式,只要是不同的数据源都必须在./conf/web.xml中加入resource-ref声明。
4、产品部署时,不论使用什么方式来部署程序,都需要在./confCatalina/localhost中加入类似gdczsam.xml的文件来配置数据源。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-339501-1-1.html 上篇帖子: 用telnet的方式检验远程服务器的连通性,在tomcat中遇到问题 下篇帖子: 使用CA签发的服务器证书搭建Tomcat双向SSL认证服务(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表