- 浏览: 626031 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (448)
- 字符串相关 (16)
- Struts2页面显示 (15)
- Hibernate错误记录 (6)
- linux命令 (2)
- java项目测试 (5)
- 个人作品 (10)
- hibernate应用 (15)
- struts1 (7)
- 数据库(除了hibernate) (42)
- J2ME/WAP (37)
- servlet/jsp (49)
- java桌面应用+java综合 (14)
- 服务器配置,报错解决 (24)
- Myeclipse配置,抛错解决 (8)
- linux (18)
- JavaScript+jquery+ajax (45)
- div css 页面设计 (16)
- 互联网综合运营 (14)
- 编程工具类 (3)
- 论文 报告 文献 (14)
- PHP (26)
- struts2 (9)
- spring (1)
- 我的IT生活 (14)
- Resin (6)
- java项目记录 (14)
- https安全 (11)
- 支付技术 (3)
最新评论
-
yihaijunyxr:
很好呀,我好久没用iteye了,今天找出两个帐号(yihaij ...
c/c++的监听tmlisten启动缓慢解决 -
yihaijun:
好像这不算是技术博客,是工作博客
c/c++的监听tmlisten启动缓慢解决 -
ml365:
后来还优化了webservice的前置框架,不用cxf,用了另 ...
c/c++的监听tmlisten启动缓慢解决 -
Jayliuying:
有点晚哈 但是也支持一下 楼主
java相关论文的参考文献【转】 -
gqsunrise:
...
我是项目经理,我的项目管理日记【20120229】
tomcat6.0连接mysql数据库连接池[原创]
1 下载Tomcat最新版本
下载地址:http://tomcat.apache.org/
2 下载mysql最新版本以及最近版本的驱动程序
下载地址:http://dev.mysql.com/downloads
http://dev.mysql.com/downloads/connector
并将下载的mysql-connector-java-5.1.0-bin.jar a连接文件放到$CATALINA_HOME/lib/下。
3 安装mysql数据库
4 创建一个tomcat应用程序,工程的名字为DBTest
5 修改$CATALINA_HOME/conf/ context.xml为以下内容
<Context path="/DBTest" docBase="DBTest"
debug="5" reloadable="true" crossContext="true">
<!-- maxActive: Maximum number of dB connections in pool. Make sure you configure your mysqld max_connections large enough to handle
all of your db connections. Set to 0 for no limit.
-->
<!-- maxIdle: Maximum number of idle dB connections to retain in pool.
Set to -1 for no limit. See also the DBCP documentation on this
and the minEvictableIdleTimeMillis configuration parameter.
-->
<!-- maxWait: Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<!-- username and password: MySQL dB username and password for dB connections -->
<!-- driverClassName: Class name for the old mm.mysql JDBC driver is
org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
-->
<!-- url: The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/ jtest?autoReconnect=true"/>
</Context>
此时要注意修改自己的数据库的用户名和密码
我建立的
数据库:jtest
用户名:javauser
密码:javadude
6 修改工程目录下的web.xml文件添加如下
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
7 创建一个java类
package com.test;
/*
* DBTest.java
*
* Created on 2007/06/07, 10:33:02
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/**
*
* @author wangzicai
*/
import javax.naming.*;
import javax.sql.*;
import java.sql.*;
public class DBTest {
String foo = "Not Connected";
int bar = -1;
public void init() {
try{
Context ctx = new InitialContext();
if(ctx == null )
throw new Exception("Boom - No Context");
DataSource ds =
(DataSource)ctx.lookup(
"java:comp/env/jdbc/TestDB");
if (ds != null) {
Connection conn = ds.getConnection();
if(conn != null) {
foo = "Got Connection "+conn.toString();
Statement stmt = conn.createStatement();
ResultSet rst =
stmt.executeQuery(
" select * from test ");
if(rst.next()) {
foo=rst.getString(1);
bar=208;
}
conn.close();
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
public String getFoo() { return foo; }
public int getBar() { return bar;}
}
8 编辑index.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import ="com.test.*" %>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<%
DBTest tst = new DBTest();
tst.init();
%>
<h2>Results</h2>
Foo <%= tst.getFoo() %><br>
Bar <%= tst.getBar() %>
</body>
</html>
9 部署测试
================参数说明=========================
maxActive="5"
表示并发情况下最大可从连接池中获取的连接数。如果数据库不是单独,供一个应用使用,通过设置maxActive参数可以避免某个应用无限制的获取连接对其他应用造成影响,如果一个数据库只是用来支持一个应用那么maxActive理论上可以设置成该数据库可以支撑的最大连接数。maxActive只是表示通过连接池可以并发的获取的最大连接数。
从图上我们可以看到连接的获取与释放是双向,当应用程序并发请求连接池时,连接池就需要从数据库获取连接,那么但应用程序使用完连接并将连接归还给连接池时,连接池是否也同时将连接归还给数据库呢?很显然答案是否定的,如果那样的话连接池就变得多此一举,不但不能提高性能,反而会降低性能,那么但应用成归还连接后,连接池如何处理呢?
maxIdle="3"
如果在并发时达到了maxActive=5,那么连接池就必须从数据库中获取5个连接来供应用程序使用,当应用程序关闭连接后,由于maxIdle=3,因此并不是所有的连接都会归还给数据库,将会有3个连接保持在连接池种中,状态为空闲。
minIdle=”2”
最小默认情况下并不生效,它的含义是当连接池中的连接少有minIdle,系统监控线程将启动补充功能,一般情况下我们并不启动补充线程。
问题:如何设置maxActive和maxIdle?
理论上讲maxActive应该设置成应用的最大并发数,这样一来即便是在最大并发的情况下,应用依然能够从连接池中获取连接,但是困难时的是我们很难准确估计到最大并发数,设置成最大并发数是一种最优的服务质量保证,事实上,如果某个用户登录提示系统繁忙,那么在他再次登录时,可能系统资源已经充足,对于拜特资金管理系统我们建议将maxActive设置为系统注册人数的十分之一到二十分之一之间。例如系统的注册人数为1000,那么设置成50-100靠近100的数字,例如85或90。
maxIdle对应的连接,实际上是连接池保持的长连接,这也是连接池发挥优势的部分,理论上讲保持较多的长连接,在应用请求时可以更快的响应,但是过多的连接保持,反而会消耗数据库大量的资源,因此maxIdle也并不是越大越好,同上例我们建议将 maxIdle设置成
50-100中靠近50的数字,例如55。这样就能在兼顾最大并发同时,保持较少的数据库连接,而且在绝大多情况,能够为应用程序提供最快的相应速度。
testOnBorrow="true"
validationQuery="select count(*) from bt_user"
我们知道数据库连接从本质上架构在tcp/ip连接之上,一般情况下web服务器与数据库服务器都不在同一台物理机器上,而是通过网络进行连接,那么当建立数据库连接池的机器与数据库服务器自己出现网络异常时,保持在连接池中的连接将失效,不能够在次使用,传统的情况下只能通过重新启动,再次建立连接,通过设置以上两个参数,但应用程序从连接池中获取连接时,会首先进行活动性检测,当获取的连接是活动的时候才会给应用程序使用,如果连接失效,连接将释放该连接。validationQuery是一条测试语句,没有实际意义,现实中,一般用一条最为简单的查询语句充当。
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
有时粗心的程序编写者在从连接池中获取连接使用后忘记了连接的关闭,这样连池的连接就会逐渐达到maxActive直至连接池无法提供服务。现代连接池一般提供一种“智能”的检查,但设置了removeAbandoned="true"时,当连接池连接数到达(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时便会启动连接回收,那种活动时间超过removeAbandonedTimeout="60"的连接将会被回收,同时如果logAbandoned="true"设置为true,程序在回收连接的同时会打印日志。removeAbandoned是连接池的高级功能,理论上这中配置不应该出现在实际的生产环境,因为有时应用程序执行长事务,可能这种情况下,会被连接池误回收,该种配置一般在程序测试阶段,为了定位连接泄漏的具体代码位置,被开启,生产环境中连接的关闭应该靠程序自己保证。
发表评论
-
备份和还原数据库【转】
2011-09-01 17:03 930使用软件备份mysql数据库(以Navicat为例) 1)打 ... -
插入数据库类型为Date的方法
2011-07-20 17:12 1529控制端用的是webwork,表单类型text 传入后用stri ... -
MySQL错误1042-Can't get hostname for your address解决方法[原]
2011-07-14 14:07 4320本人最近在linux上部署php环境,在利用xampp部署后有 ... -
因为用class12.jar去做10i的驱动报错的解决【原创】
2011-07-13 18:35 899Connection refused(DESCRIPTION ... -
运用PowerDesigner建模和建表
2011-02-21 17:20 26231 建工作空间 File -- new model – ph ... -
spring jdbc queryForList出来的数据获取内幕!【体会】
2011-01-24 10:05 3442对于一般的hibernate查询,返回的往往是一个我们熟悉的l ... -
c3p0和jdbcTemplate配置oracle集群RAC记录【原】
2011-01-17 10:26 3736领导给了一串连接串给我,如下: PERAC = (DESC ... -
指定索引/*+INDEX(TABLE INDEX_NAME)*/等优化Oracle查询效率的总结
2010-12-15 21:00 4754在之前的项目有一个很痛苦的查询,用了太多的跨数据库访问,加上数 ... -
oracle跨数据库授权【原创】
2010-12-12 22:23 1878对于oracle数据库,某个用户跨数据库访问另一个用户的表,有 ... -
oracle远程连接查询【原创】
2010-12-12 22:21 987对于不在本库的表,需要练级查询的话,可以再oracle里面 ... -
转:深入浅出SQL之左连接、右连接和全连接
2010-12-12 22:10 819为了从两个或多个表中选出数据,我们一般使用表连接来实 ... -
左连接语句【原创】
2010-12-12 16:50 790语句如下: Query q = sessionFa ... -
存储过程详解【转载】
2010-12-12 11:20 909存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信 ... -
为什么要使用存储过程及其书写方法【原创+转载】
2010-12-12 11:18 935你想要是要处理很多数据,全部交由java去处理的时候,从数据库 ... -
.Mdf文件如何导入到SqlServer数据库【转】
2010-12-12 11:11 1857任务:将PUBS重新导入可以这样用sp_attach_db ... -
proxool 链接sqlserver的配置【转】
2010-12-12 11:08 1182配置之前必须引入proxool-0.9.0RC1.jar包 ... -
如何连接SQL Server数据库(Java版)【转】
2010-12-12 11:08 1323用Java连接SQL Server2000数据库有多种方法 ... -
一个比较规范的jdbc连接方法类
2010-12-11 22:40 811主要是留意里面的关闭连接释放资源的写法~ public ... -
转贴]如何正确利用Rownum来限制查询所返回的行数?
2010-12-11 11:29 733如何正确利用Rownum来限制查询所返回的行数? 软件环境: ... -
sql中limit用法【转】
2010-12-11 11:17 1940$query="select * from tb ...
相关推荐
本文将详细介绍如何配置Tomcat的连接池,即Catalina自带的`Apache Commons DBCP2`或`Apache Tomcat JDBC Pool`。 **一、Tomcat连接池的引入** Tomcat默认并未开启连接池,我们需要手动配置。首先,在Tomcat的`conf...
在Tomcat中,常用的连接池组件有Apache的DBCP、C3P0和Tomcat自带的Tomcat-jdbc。本篇博客可能主要介绍了Tomcat-jdbc的配置,因为它是Tomcat 7及以上版本的默认连接池实现,性能优秀且易于使用。 配置Tomcat连接池...
二、Tomcat自带的连接池Catalina JDBC Connection Pool Tomcat 5.5及更高版本内置了Catalina JDBC Connection Pool(也称为Apache Commons DBCP),这是一个基于Apache Commons Pool和Apache Commons Database ...
2. **Tomcat连接池**:Tomcat自带了对连接池的支持,可以通过`Resource`标签在`context.xml`文件中进行配置。 #### 三、配置步骤 ##### 1. 添加Oracle JDBC驱动到Tomcat - 将Oracle JDBC驱动包(例如`ojdbc6.jar`...
当应用请求数据库连接时,Tomcat JDBC首先会从空闲连接池中获取一个连接。如果没有可用连接,它会根据配置的最小Idle值和最大Active值决定是否创建新的连接。连接使用完毕后,通过调用`close()`方法归还连接,实际...
本文档将详细介绍如何在自安装的Tomcat服务器以及JBuilder自带的Tomcat中配置数据库连接池,确保开发与调试过程中的高效性。 #### 二、准备工作 1. **安装Tomcat** - 确保安装的Tomcat版本支持数据库连接池功能...
Tomcat自带了一个名为Apache Commons DBCP的连接池实现,我们可以通过修改服务器的配置文件来启用它。主要涉及的配置文件有`server.xml`和`context.xml`。 在`server.xml`文件中,我们通常不会直接配置数据源,而是...
除了使用Tomcat自带的连接池之外,还可以选择使用Apache Commons DBCP作为连接池。在Spring配置文件中定义数据源: ```xml **"/> **"/> ``` - **driverClassName**: Oracle JDBC驱动类名。 - **url**: ...
5. Tomcat JDBC Connection Pool:Tomcat服务器自带的连接池,适用于那些不希望引入额外依赖的项目。 这些连接池各有优缺点,选择时应考虑项目的具体需求,如性能、稳定性、易用性、功能特性等。了解和熟悉这些连接...
4. **DBPool**:Tomcat自带的连接池实现,虽然功能相对简单,但与Tomcat集成方便,适用于小型项目。 每种连接池都有其特点和适用场景,选择合适的连接池需要考虑应用的规模、性能需求以及与现有框架的兼容性等因素...
常见的Java连接池实现有Apache的DBCP、C3P0、HikariCP以及Tomcat的内置连接池等。选择合适的连接池依赖于应用程序的需求,如并发量、性能要求、稳定性等因素。正确的配置和使用连接池是提升Java应用程序性能、降低...
5. Tomcat JDBC Connection Pool:Tomcat服务器自带的数据库连接池,它是一个完全符合JDBC 4.0规范的连接池实现,支持JNDI绑定和各种数据库驱动。 在使用数据库连接池时,我们需要关注以下几点: 1. 配置参数:...
5. Tomcat JDBC Pool:Tomcat服务器自带的连接池,基于Jakarta-pool2实现。 ** 使用示例:HikariCP配置与使用 ** 在Spring框架中,可以使用以下配置来启用HikariCP连接池: ```xml <!-- 其他配置属性...
标题“hibernate连接池之tomcat6的配置”涉及到的是如何在Tomcat6服务器中配置Hibernate连接池,以便高效管理数据库连接。这通常是为了优化应用程序的性能和资源利用。以下将详细介绍相关知识点: 1. **Hibernate**...
4. **Tomcat JDBC Connection Pool**:Tomcat自带的JDBC连接池,它的设计目标是轻量级、快速且易于使用。它提供了自动防泄漏、连接健康检查等功能。 使用JDBC连接池的步骤通常包括以下几步: 1. **引入依赖**:在...
5. **Tomcat JDBC Connection Pool**:这是Apache Tomcat服务器自带的连接池,适合在Spring Boot等框架中使用。对应的jar包是`tomcat-jdbc.jar`。 这些jar包的使用通常涉及以下步骤: 1. **添加依赖**:在Maven或...
- JNDI绑定:在应用服务器(如Tomcat、JBoss等)的配置文件中,将数据源绑定到JNDI名称,以便于应用通过JNDI查找和获取连接池。 - 应用程序集成:在J2EE应用中,通过JNDI查找并获取连接池,然后从连接池中获取和...
5. Tomcat JDBC Connection Pool:Tomcat服务器自带的连接池,适用于那些不希望引入额外依赖的项目。 引入这些jar包到项目中通常是通过Maven或Gradle等构建工具来完成的,只需在配置文件中添加相应的依赖,即可自动...
5. Tomcat JDBC Connection Pool:Tomcat服务器自带的连接池,简单易用且性能良好。 三、如何在项目中引入jar包 在Java项目中,通常我们会使用构建工具如Maven或Gradle来管理依赖。对于上述提到的连接池,我们可以...
2. **JdbcTomcat(Apache Tomcat JDBC Connection Pool)**:Tomcat自带的数据库连接池,是Apache软件基金会的Jakarta Commons DBCP项目的升级版。它提供了更丰富的功能,如支持预编译的SQL语句(PreparedStatement...