- 浏览: 602112 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 889使用软件备份mysql数据库(以Navicat为例) 1)打 ... -
插入数据库类型为Date的方法
2011-07-20 17:12 1464控制端用的是webwork,表单类型text 传入后用stri ... -
MySQL错误1042-Can't get hostname for your address解决方法[原]
2011-07-14 14:07 4225本人最近在linux上部署php环境,在利用xampp部署后有 ... -
因为用class12.jar去做10i的驱动报错的解决【原创】
2011-07-13 18:35 821Connection refused(DESCRIPTION ... -
运用PowerDesigner建模和建表
2011-02-21 17:20 25741 建工作空间 File -- new model – ph ... -
spring jdbc queryForList出来的数据获取内幕!【体会】
2011-01-24 10:05 3370对于一般的hibernate查询,返回的往往是一个我们熟悉的l ... -
c3p0和jdbcTemplate配置oracle集群RAC记录【原】
2011-01-17 10:26 3690领导给了一串连接串给我,如下: PERAC = (DESC ... -
指定索引/*+INDEX(TABLE INDEX_NAME)*/等优化Oracle查询效率的总结
2010-12-15 21:00 4715在之前的项目有一个很痛苦的查询,用了太多的跨数据库访问,加上数 ... -
oracle跨数据库授权【原创】
2010-12-12 22:23 1751对于oracle数据库,某个用户跨数据库访问另一个用户的表,有 ... -
oracle远程连接查询【原创】
2010-12-12 22:21 888对于不在本库的表,需要练级查询的话,可以再oracle里面 ... -
转:深入浅出SQL之左连接、右连接和全连接
2010-12-12 22:10 789为了从两个或多个表中选出数据,我们一般使用表连接来实 ... -
左连接语句【原创】
2010-12-12 16:50 729语句如下: Query q = sessionFa ... -
存储过程详解【转载】
2010-12-12 11:20 852存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信 ... -
为什么要使用存储过程及其书写方法【原创+转载】
2010-12-12 11:18 886你想要是要处理很多数据,全部交由java去处理的时候,从数据库 ... -
.Mdf文件如何导入到SqlServer数据库【转】
2010-12-12 11:11 1811任务:将PUBS重新导入可以这样用sp_attach_db ... -
proxool 链接sqlserver的配置【转】
2010-12-12 11:08 1151配置之前必须引入proxool-0.9.0RC1.jar包 ... -
如何连接SQL Server数据库(Java版)【转】
2010-12-12 11:08 1290用Java连接SQL Server2000数据库有多种方法 ... -
一个比较规范的jdbc连接方法类
2010-12-11 22:40 775主要是留意里面的关闭连接释放资源的写法~ public ... -
转贴]如何正确利用Rownum来限制查询所返回的行数?
2010-12-11 11:29 685如何正确利用Rownum来限制查询所返回的行数? 软件环境: ... -
sql中limit用法【转】
2010-12-11 11:17 1835$query="select * from tb ...
相关推荐
1、本订销系统程序默认使用数据为连接池使用的apache commons-dbcp-1.2.1管理数据库连接(tomcat自带),确保该包可用.若要使用其它数据库连接沲,需要修改easyjf-dbo.xml文件中的相应配置。 2、若不能正常访问数据库,...
1、本订销系统程序默认使用数据为连接池使用的apache commons-dbcp-1.2.1管理数据库连接(tomcat自带),确保该包可用.若要使用其它数据库连接沲,需要修改easyjf-dbo.xml文件中的相应配置。 2、若不能正常访问...
76.4. 在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中? 86 76.5. 在weblogic中发布ejb需涉及到哪些配置文件 87 76.6. 如何在weblogic中...
•无法共享web服务器的连接池管理能力 •无法统一部署,实施人员既要部署自己的web应用,还需要部署报表服务器 •用户角色管理永不够用,具体的应用、具体的行业总会有自己独特的用户角色管理需求,作为通用产品...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
Tomcat是一个免费的开源的Serlvet容器,在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很...
4.1 Content Store数据库连接池设定 4.2 开启审计功能 4.2.1 Audit Native Query 4.2.2 Audit logging level 4.2.3 Audit run-time usage logging level 4.2.4 Audit administration logging level 4.2.5 ...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...