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

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

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

<!--Connect MySqlDb-->
<Resource name="jdbc/DBname" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"
username="root"
password="jiangwei"
maxActive="200"
maxIdle="50"
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中输入以下内容:

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

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

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

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

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

(test为数据库名称)

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

最后在代码中访问:

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





												

Apache中配置数据库连接池(数据源)的更多相关文章

  1. tomcat项目中配置数据库连接池

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

  2. 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  3. java配置数据库连接池的方法步骤

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

  4. WebSphere配置数据库连接池

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

  5. SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池

    三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...

  6. 项目经验——jboss 配置数据库连接池

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

  7. Druid + spring 配置数据库连接池

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

  8. Jsp中使用数据库连接池.

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

  9. web.config文件中配置数据库连接的两种方式

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

随机推荐

  1. hdu 4705 Y (树形dp)

    Description Input 4 1 2 1 3 1 4 题目的意思是给你一棵树,让你找到所有不在一条路径上的三个点的情况个数.乍一看正向处理比较麻烦,我们从反方向考虑,如果是取在一条路径上的3 ...

  2. Python基础教程(006)--Python的特点

    前言 了解Python背景,明白Python在目前社会中的标准库是有成千上万的Python爱好者共同维护的. 知识点 Python是完全面相对象的语言 函数,模块,数字,字符串都是对象,在Python ...

  3. 自己动手写ORB特征

    通过一些简单的算法修改,使ORB的提取效率加速了5.8倍.编译该程序需要CPU支持SSE指令集. 如果我们能够对特征提取部分进一步并行化处理,则算法还可以有加速的空间. // // Created b ...

  4. C++笔试题之宏定义相关

    1. #define CALC(X) X*X int i; i=CALC(+)/(+); cout<<i<<endl; 输出:31 宏定义在替换处展开为:i = 5+5*5+5 ...

  5. 76、python学习第二篇

    生成随机数的测试数据 ''' Created on 2017年4月8日 @author: weizhen #to create data for testing ''' import random f ...

  6. 73、salesforce通过JAVA来Call在salesforce中已经写好的Restful处理接口

    /** *使用salesforce通过REST方式作为webservice,需要以下几点 *1.类和方法需要global,方法需要静态 *2.类需要通过RestResource(UrlMapping= ...

  7. 51、tf-idf值提取关键词

    import testWord2vec2 as tw import tensorflow_util as tu import numpy as np model = tw.load_model() n ...

  8. 动态规划及LCS

    LCS的python实现: #!/usr/bin/env python #-*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultenco ...

  9. ROW_NUMBER() over(order by ID desc ) as RowNumber 返回类型问题

    因为ID是int类型,所以ROW_NUMBER() over(order by ID desc ) as RowNumber 想当然的认为是Int类型 实际ROW_NUMBER() over(orde ...

  10. jmeter beanshell postprocessor 使用

    String newtoken=bsh.args[0];print(newtoken);${__setProperty(newtoken,${token},)}; String newcompanyI ...