Apache中配置数据库连接池(数据源)
由于基于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中配置数据库连接池(数据源)的更多相关文章
- tomcat项目中配置数据库连接池
1. 在项目中新建context.xml文件,不要在tomcat服务器的目录中修改context.xml(会对整个服务器生效).. 在web项目的META-INF中存放context.xml 2. ...
- 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库
作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...
- java配置数据库连接池的方法步骤
java配置数据库连接池的方法步骤 java配置数据库连接池的方法步骤,需要的朋友可以参考一下 先来了解下什么是数据库连接池数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vecto ...
- WebSphere配置数据库连接池
通过WebSphere配置数据库连接池一共需要三项: 1.配置连接驱动,在这里叫:JDBC提供程序; 2.配置数据库连接池,在这里叫:配置数据源; 3.配置数据库登录帐号,密码,在这里 ...
- SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池
三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...
- 项目经验——jboss 配置数据库连接池
数据库的连接和关闭是非常消耗系统资源的,在多层结构的应用环境中,这种资源消耗又直接的反映到系统性能上来.在项目实际应用中,最常用的解决方案便是建立数据库连接池. 一.数据库连接池基本原理 当程序启动时 ...
- Druid + spring 配置数据库连接池
1. Druid的简介 Druid是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...
- Jsp中使用数据库连接池.
原文 Jsp中使用数据库连接池. 1. 在tomcat服务器目录下面的conf中找到一个叫Context.xml的配置文件,在其中加入以下代码 <Resource name="jdbc ...
- web.config文件中配置数据库连接的两种方式
web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报 分类: 数据库(74) 在网站开发 ...
随机推荐
- Halo(五)
ApplicationPreparedEvent 监听事件 Event published once the application context has been refreshed but be ...
- makefile 中的patsubst
1. wildcard:扩展通配符 2. notdir:去除路径 3. patsubst:替换通配符 若有一个makefile如下: src=$(wildcard *.c ./sub/*.c) dir ...
- 【集群】Redis哨兵(Sentinel)模式
主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用.这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式. 一.哨兵 ...
- Codeforces 789e The Great Mixing (bitset dp 数学)
Sasha and Kolya decided to get drunk with Coke, again. This time they have k types of Coke. i-th typ ...
- sql 基础语法 alter用法和视图,透视
--查询没有被删除的学生 alter table StuInfo --修改列属性 alter column isdelete bit null alter table StuInfo --删除列 dr ...
- 2018icpc沈阳/gym101955 J How Much Memory Your Code Is Using? 签到
题意: 给你定义一堆变量,计算一下这些变量共占了多少k内存. 题解: 按题意模拟即可,善用ceil() // // Created by melon on 2019/10/22. // #includ ...
- scrapy入门实战-爬取代理网站
入门scrapy. 学习了有这几点 1.如何使用scrapy框架对网站进行爬虫: 2.如何对网页源代码使用xpath进行解析: 3.如何书写spider爬虫文件,对源代码进行解析: 4.学会使用scr ...
- Hive 数据类型转换(转)
原文连接:https://www.iteblog.com/archives/892.html 在<Hive内置数据类型>文章中,我们提到了Hive内置数据类型由基本数据类型和复杂数据类型组 ...
- 将已有的lng lat 字段转换成point类型字段
利用拼接字符串转换point select GeomFromText(CONCAT('POINT(',lng,' ',lat,')')) from community limit 1; 插入字段到新表 ...
- Ajax,ajax封装
/** * Created by liyinghao on 2016/8/23. */ /*仿jQuery中的ajax方法,简单版实现;封装ajax的工具函数*/ /* * 1 请求方式 type g ...