由于基于HTTP协议的Web程序是无状态的,因此,在应用程序中使用JDBC时,每次处理客户端请求都会重新建立数据库链接,如果客户端的请求频繁的话,这将会消耗非常多的资源,因此,在Tomcat中提供了数据库连接池技术,数据库连接池负责分配、管理和释放数据库链接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个数据库连接,在使用完一个数据库连接后,将其归还数据库连接池,以备其他程序使用,在Tomcat中配置数据库连接池有如下两种方法:

1.配置全局的数据库连接池

(1)在Tomcat安装目录\conf\server.xml文件中找到<GlobalNamingResources>标签,并加入一个子标签<Resource>,这个子标签的配置如下:

  1. <!--Connect MySqlDb-->
  2. <Resource name="jdbc/DBname" auth="Container"
  3. type="javax.sql.DataSource"
  4. driverClassName="com.mysql.jdbc.Driver"
  5. url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"
  6. username="root"
  7. password="jiangwei"
  8. maxActive="200"
  9. maxIdle="50"
  10. maxWait="3000"/>

(test为数据库名称)

上面的配置代码有几个和数据库连接池性能有关的属性需要说明一下:

<1>maxActive:连接池可以存储的最大连接数,也就是应用程序可以同时获得的最大连接数。这个属性值一般根据Web程序的最大访问量设置

<2>maxIdle:最大空闲连接数。当应用程序使用完一个数据库连接后,如果连接池中存储的连接数小于maxIdle,这个数据库连接并不马上释放,而是存储在连接池中,以备其他程序使用,这个属性值一般根据Web程序的平均访问量设置

<3>maxWait:暂时无法获得数据库连接的等待时间(单位:毫秒)。如果应用程序从数据库连接池中获得的数据库连接已经等于maxActive,而且都没有归还给数据库连接池,这时在有程序想获得数据库连接,就会等待maxWait所指定的时间,如果超过maxWait所指定的时间还无法获得数据库连接,就会抛出异常。

<4>其他参数这里就不多做介绍了

(2)在Tomcat安装目录\conf\Catalina\localhost中建立一个webdemo.xml文件(文件名要和<Context>标签中的path属性值一致,同时也要和项目名称一致),然后在webdemo.xml中输入以下内容:

  1. <Context path="/MySqlDataSourceDemo" doBase="MySqlDataSourceDemo" debug="0">
  2. <ResourceLink name="jdbc/DBname" global="jdbc/DBname" type="javax.sql.DataSource"/>
  3. </Context>

至此全局配置数据库连接池的方法就到这结束了,要记得从新启动服务器才有效

2.局部配置数据库连接池

在Tomcat安装目录\conf\Catalina\localhost中建立一个webdemo.xml文件(文件名要和<Context>标签中的path属性值一致,同时也要和项目名称一致),然后在webdemo.xml中输入以下内容:

  1. <Context path="/webdemo" docBase="webdemo" debug="0">
  2. <Resource name="jdbc/DBname" auth="Container"
  3. type="javax.sql.DataSource"
  4. driverClassName="com.mysql.jdbc.Driver"
  5. url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"
  6. username="root"
  7. password="jiangwei"
  8. maxActive="200"
  9. maxIdle="50"
  10. maxWait="3000"/>
  11. </Context>

(test为数据库名称)

同样也需要重新启动服务器才会有效果

最后在代码中访问:

  1. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. response.setContentType("text/html");
  3. PrintWriter out = response.getWriter();
  4. Context sourceCtx;
  5. try {
  6. sourceCtx = new InitialContext();
  7. DataSource ds = (DataSource) sourceCtx.lookup("java:comp/env/jdbc/DBname");
  8. Connection conn = ds.getConnection();
  9. Statement stmt = conn.createStatement();
  10. stmt.executeQuery("select * from student");
  11. ResultSet rs = stmt.getResultSet();
  12. rs.next();
  13. out.print(rs.getString(1));
  14. } catch (NamingException e) {
  15. e.printStackTrace();
  16. } catch (SQLException e) {
  17. e.printStackTrace();
  18. }
  19. out.flush();
  20. out.close();
  21. }
  1. 注意:
  2. (1)Tomcat 错误“inside the host appBase has been specified, and will be ignored
  3. 错误信息:
  4. 警告: A docBase D:/Tomcat/webapps/myApp inside the host appBase has been specified, and will be ignored
  5. 错误原因:
  6. 假设要部署工程 "myApp" 放到了 ${catalina.home}/webapps 下。(这相当于隐性的定义了一个 docBase ,指向
  7. " ${catalina.home}/webapps/myApp " )。
  8. 同时在 /conf/Catalina/localhost 下建立了配置文件 myApp.xml ,在其中定义了 docBase 目标指向 " ${catalina.home}/webapps/myApp "
  9. 这样,在 Tomcat 启动的时候,先找到了 myApp.xml 配置文件中定义的 docBase 然后 Tomcat 自动检测 ${catalina.home}/webapps 下是否存放了合法的工程,并自动加载(根据配置文件的设置)。这样,Tomcat 又找到了一个相同的 docBase 所以输出了错误信息。
  10. 解决办法:
  11. myApp 工程 ${catalina.home}/webapps 目录移出, 然后 修改 配置文件 myApp.xml 指向该目录。即在Tomcat安装目录中的webapps目录中删除myApp应用
  12. (2)最好使用第二种方式局部配置数据库连接池的方法,因为对于全局的配置数据库连接池中修改server.xml这个文件最好不要做修改,后面可能还需要做修改,所以如果我们要做修改的话,最好拷贝一份出来!
  1. 												
  2. Apache中配置数据库连接池(数据源)的更多相关文章

      1. tomcat项目中配置数据库连接池
      1. 1. 在项目中新建context.xml文件,不要在tomcat服务器的目录中修改context.xml(会对整个服务器生效)..   web项目的META-INF中存放context.xml 2. ...

      1. 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库
      1. 作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

      1. java配置数据库连接池的方法步骤
      1. java配置数据库连接池的方法步骤 java配置数据库连接池的方法步骤,需要的朋友可以参考一下   先来了解下什么是数据库连接池数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vecto ...

      1. WebSphere配置数据库连接池
      1. 通过WebSphere配置数据库连接池一共需要三项:     1.配置连接驱动,在这里叫:JDBC提供程序;    2.配置数据库连接池,在这里叫:配置数据源;  3.配置数据库登录帐号,密码,在这里 ...

      1. SpringBoot学习(三)-->SpringJava配置方式之读取外部的资源配置文件并配置数据库连接池
      1. 三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...

      1. 项目经验——jboss 配置数据库连接池
      1. 数据库的连接和关闭是非常消耗系统资源的,在多层结构的应用环境中,这种资源消耗又直接的反映到系统性能上来.在项目实际应用中,最常用的解决方案便是建立数据库连接池. 一.数据库连接池基本原理 当程序启动时 ...

      1. Druid + spring 配置数据库连接池
      1. 1. Druid的简介 Druid是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...

      1. Jsp中使用数据库连接池.
      1. 原文 Jsp中使用数据库连接池. 1. tomcat服务器目录下面的conf中找到一个叫Context.xml的配置文件,在其中加入以下代码 <Resource name="jdbc ...

      1. web.config文件中配置数据库连接的两种方式
      1. web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报    分类: 数据库(74)  在网站开发 ...

    1.  
    2. 随机推荐

        1. cerebro使用
        1. 一.安装cerebro 上传插件到任意路径 tar zxvf 解压插件包 [root@ngsocdev14 es]# ls cerebro-0.8.3.zip software [root@ngsoc ...

        1. loadRunner函数之web_find
        1. int web_find( const char *StepName, <Attributes and Specifications list>, char *searchstring, ...

        1. 为何使用Html5+CSS3
        1. 一:大多浏览器支持,低版本也没问题 我看点这方面的资料,是为了做手机应用网站(有三个方案,这个是备用方案),可以开发响应式网站,可以脱离开发平台进行跨平台. 在Html5网页中引入Modernizr, ...

        1. php开发面试题---jquery和vue对比(整理)
        1. php开发面试题---jquery和vue对比(整理) 一.总结 一句话总结: jquery的本质是更方便的选取和操作DOM对象,vue的本质是数据和页面分离 反思的回顾非常有用,因为决定了我的方向和 ...

        1. zju1610Count the Colors
        1. ZOJ Problem Set - 1610 Count the Colors Time Limit: 2 Seconds      Memory Limit: 65536 KB Painting s ...

        1. Windows下 wamp下Apache配置虚拟域名
        1. 安装好wamp后  找到 找到  Include conf/extra/httpd-vhosts.conf   去掉前面的#   并保存 修改 DocumentRoot  和  ServerName ...

        1. 性能测试基础 ---TCP通信过程的状态码与过程,以及出现错误码的分析(TIME_WAIT,CLOSE_WAIT)
        1. TCP通信过程 如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手).数据传输.断开TCP连接通道(四次挥手). 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过 ...

        1. cs224d 作业 problem set2 (三) 用RNNLM模型实现Language Model,来预测下一个单词的出现
        1.   今天将的还是cs224d 的problem set2 的第三部分习题, 原来国外大学的系统难度真的如此之大,相比之下还是默默地再天朝继续搬砖吧 下面讲述一下RNN语言建模的数学公式: 给出一串连续 ...

        1. c++简单String类实现
        1. #include <iostream> #include <string> using namespace std; class String { public: String ...

        1. 【C++第一个Demo】---控制台RPG游戏2【通用宏、背包类】
        1. [通用 ]--一些游戏中常用的宏.函数和枚举 #ifndef _MARCO_H_ #define _MARCO_H_ //------------------------常用系统库---------- ...