由于基于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. Nacos 常见问题及解决方法

    Nacos 开源至今已有一年,在这一年里,得到了很多用户的支持和反馈.在与社区的交流中,我们发现有一些问题出现的频率比较高,为了能够让用户更快的解决问题,我们总结了这篇常见问题及解决方法,这篇文章后续 ...

  2. 【Flutter学习】之深入浅出 Key

    一,前言 在开发 Flutter 的过程中你可能会发现,一些小部件的构造函数中都有一个可选的参数——Key.在这篇文章中我们会深入浅出的介绍什么是 Key,以及应该使用 key 的具体场景. 二,什么 ...

  3. Homestead中PHP扩展无phpize难以安装redis扩展的问题及解决办法

    这真是一个非常深的坑.homestead中自带很多版本的php.然而扩展中缺没有phpize,这个东西是php添加扩展需要的东西本人在laravel中需要用到Redis扩展.这个和laravel的pr ...

  4. Redis入门很简单之一【简介与环境搭建】

    Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件  [Redis简介] <一>. NoSQL ...

  5. javascript全量匹配屏蔽词

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. python 去除字符串两端字符串

    转载:http://blog.sina.com.cn/s/blog_940224600100w8l0.html Python中的strip用于去除字符串的首位字符,同理,lstrip用于去除左边的字符 ...

  7. 用cd 命令进入和退出D盘文件夹的操作步骤。

    Windows键+R打开运行 输入cmd敲回车,打开命令提示符程序. 输入“cd..”敲回车会退回到上一级目录. 输入“cd\”敲回车会直接退回到C盘根目录 在CMD程序里输入“d:”敲回车可以进入D ...

  8. Struts1.3——使用MyEclipse集成工具开发Struts

    前面两篇通过手工写代码,手工配置struts-config.xml文件的方法来开发了一个最简单的struts项目,通过手工的方式旨在学习底层原理细节.当熟悉了以后,我们就不需要再通过纯手工的方式来开发 ...

  9. openstack部署安装

    OpenStack实战 准备环境 controller 10.0.0.11 compute1 10.0.0.31 常用服务端口 mariadb:3306 memcached:11211 消息队列:56 ...

  10. spark textFile读取多个文件

    1.spark textFile读取File 1.1 简单读取文件 val spark = SparkSession.builder() .appName("demo") .mas ...