java连接池和java数据库连接池原理之间有什么关系?tomcat连接数和数据库连接数哪个设置大点?

西西软件下载最安全的下载网站、值得信赖的软件下载站!
→ Tomcat数据库连接池的配置方法总结
类型:编程辅助大小:3.6M语言:中文 评分:7.5
连接是一种关键的有限的昂贵的资源,这在多用户网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标,数据库连接池正是针对这个问题提出的.数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏,这样可以明显提高对数据库操作的性能.数据库连接池在初始化的时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是又最小数据库连接数来设定的,无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中.数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:1.最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费.2.最大连接数是连接池申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待对了中,这回影响之后的数据库操作如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接,不过,这些小于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时被释放.实例使用的Tomcat版本为6.0方法一:&在Tomcat的conf/context.xml中配置在Tomcat\apache-tomcat-6.0.33\conf目录下的context.xml文件中配置默认值如下:&?xml version='1.0' encg='utf-8'?&
&WatchedResource&WEB-INF/web.xml&/WatchedResource&
&/Context&配置连接池:&?xml version='1.0' encoding='utf-8'?&&Context&
&WatchedResource&WEB-INF/web.xml&/WatchedResource&
&!--配置oracle数据库的连接池--&
&Resource name=&jdbc/oracleds&
author=&Container&
type=&javax.sql.DataSource&
maxActive=&100&
maxIdle=&30&
maxWait=&10000&
username=&scott&
password=&tiger&
driverClassName=&oracle.jdbc.dirver.OracleDriver&
url=&jdbc:oracle:thin:@127.0.0.1:1521:ora9& /&
&!--配置的连接池,
需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下
maxIdle 连接池中最多可空闲maxIdle个连接
minIdle 连接池中最少空闲maxIdle个连接
initialSize 初始化连接数目
maxWait 连接池中连接用完时,新的请求等待时间,毫秒
username 数据库用户名
password 数据库密码
&Resource name=&jdbc/mysqlds&
auth=&Container&
type=&javax.sql.DataSource&
username=&root&
password=&root&
maxIdle=&30&
maxWait=&10000&
maxActive=&100&
driverClassName=&com.mysql.jdbc.Driver&
url=&jdbc:mysql://127.0.0.1:3306/db_blog& /&
&/Context&配置好后需要注意的两个步骤1.将对应数据库的驱动类放到tomcat的lib目录西安2.重新启动tomcat服务器,让配置生效在web应用程序的web.xml中设置数据源参考,如下:在&web-app&&/web-app&节点中加入下面内容&resource-ref&
&description&mysql数据库连接池&/description&
&!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值&jdbc/mysqlds&一致 --&
&res-ref-name&jdbc/mysqlds&/res-ref-name&
&!-- 资源类型 --&
&res-type&javax.sql.DataSource&/res-type&
&res-auth&Container&/res-auth&
&res-sharing-scope&Shareable&/res-sharing-scope&
&/resource-ref&错误解决:javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:
java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.iblog.util.DBPoolUtil.&clinit&(DBPoolUtil.java:34)解决方案:上面的异常信息是配置文件中JNDI没有初始化造成的如果下面的问题都不存在1.要去检查下配置文件中连接数据库的URL参数是否正确2.以及是否导入了正常的包3.检查在Tomcat中conf/server.xml文件,检查是否设置useNaming=&false&,如果是,去掉2.那就是通过main方法测试的,这个数据源不支持这样的测试方法,程序要运行在Tomcat中才能找到相应的数据源.[我在测试时犯这样的错导致上面错误出现]&%@ page language=&java&
pageEncoding=&UTF-8& contentType=&text/ charset=UTF-8&%& & &&&%@ page import=&java.sql.*& %&
&%@ page import=&javax.naming.*& %&
&%@ page import=&javax.sql.DataSource& %&
&title&Tomcat6.0 JNDI!&/title&
Tomcat连接池测试,获取数据源 &br&
//初始化查找命名空间
Context ctx = new InitialContext();
//参数java:/comp/env为固定路径
Context envContext = (Context)ctx.lookup(&java:/comp/env&);
//参数jdbc/mysqlds为数据源和JNDI绑定的名字
DataSource ds = (DataSource)envContext.lookup(&jdbc/mysqlds&);
Connection conn = ds.getConnection();
conn.close();
out.println(&&span style='color:'&JNDI测试成功&span&&);
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
运行效果:方法二:在Tomcat的conf/server.xml中配置打开tomcat的conf/server.xml文件,找到&GlobalNamingResources&&/GlobalNamingResources&节点,默认的内容如下&GlobalNamingResources&
&Resource name=&UserDatabase& auth=&Container&
type=&org.apache.catalina.UserDatabase&
description=&User database that can be updated and saved&
factory=&org.apache.catalina.users.MemoryUserDatabaseFactory&
pathname=&conf/tomcat-users.xml& /&
&/GlobalNamingResources&在该节点中加入相关的池配置信息,如下& &GlobalNamingResources&
&Resource name=&UserDatabase& auth=&Container&
type=&org.apache.catalina.UserDatabase&
description=&User database that can be updated and saved&
factory=&org.apache.catalina.users.MemoryUserDatabaseFactory&
pathname=&conf/tomcat-users.xml& /&
&!--配置mysql数据库的连接池,
需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下
&Resource name=&jdbc/mysqlds&
auth=&Container&
type=&javax.sql.DataSource&
username=&root&
password=&root&
maxIdle=&30&
maxWait=&10000&
maxActive=&100&
driverClassName=&com.mysql.jdbc.Driver&
url=&jdbc:mysql://127.0.0.1:3306/db_blog& /&
&/GlobalNamingResources&在tomcat的conf/context.xml文件中的&Context&&/Context&节点中加入如下内容&ResourceLink name=&jdbc/mysqlds& global=&jdbc/mysqlds& type=&javax.sql.DataSource&/&然后在web项目中的WEB-INF目录下的web.xml中配置&resource-ref&
&description&mysql数据库连接池&/description&
&!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值&jdbc/mysqlds&一致 --&
&res-ref-name&jdbc/mysqlds&/res-ref-name&
&!-- 资源类型 --&
&res-type&javax.sql.DataSource&/res-type&
&res-auth&Container&/res-auth&
&res-sharing-scope&Shareable&/res-sharing-scope&
&/resource-ref&同样配置好后,需要重新启动服务器,让配置生效.方法三:在Tomcat的conf/server.xml中配置虚拟目录时配置&在配置虚拟目录时,也就是在配置conf下面的server.xml时,在context标签内添加池配置.在说该方法之前,先说一下,如何用tomcat配置虚拟目录在tomcat\conf下server.xml中找到&Host name=&localhost&
appBase=&webap&
unpackWARs=&true& autoDeploy=&true&
xmlValidation=&false& xmlNamespaceAware=&false&&
&/Host&在其中添加:&Context path=&/website& docBase=&F:/myweb& reloadable=&true&&&/Context&注意:docBase要改成你的项目目录。path为虚拟路径,访问时的路径,注意:一定要加“/”&debug建议设置为0reloadable设置为true。&&这样重新启动tomcat实例中如下配置&Context path=&/website& docBase=&D:/program files/Tomcat/apache-tomcat-6.0.33/weba/iblog.war& reloadable=&true&&
&/Context&接下来添加池配置,如下&!--配置虚拟目录--&&Context path=&/website& docBase=&D:/program files/Tomcat/apache-tomcat-6.0.33/webapps/iblog.war& reloadable=&true&&
&Resource name=&jdbc/mysqlds&
auth=&Container&
type=&javax.sql.DataSource&
username=&root&
password=&root&
maxIdle=&30&
maxWait=&10000&
maxActive=&100&
driverClassName=&com.mysql.jdbc.Driver&
url=&jdbc:mysql://127.0.0.1:3306/db_blog&
&/Context&启动服务器,测试,注意因为我们配置了path值为”/website”,所以访问的路径应该为website.如下图:方法四:在Web项目中的META-INF目录下新建一个文件context.xml,写入配置注意:是META-INF目录下,不是WEB-INF目录下&?xml version='1.0' encoding='utf-8'?&&Context&
&Resource name=&jdbc/mysqlds&
auth=&Container&
type=&javax.sql.DataSource&
username=&root&
password=&root&
maxIdle=&30&
maxWait=&10000&
maxActive=&100&
driverClassName=&com.mysql.jdbc.Driver&
url=&jdbc:mysql://127.0.0.1:3306/db_blog&
logAbandoned=&true& /&
&/Context&
12-1705-2005-1205-1901-2801-2801-2701-1301-1201-12
阅读本文后您有什么感想? 已有23人给出评价!
名称大小下载Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池_Java_ThinkSAAS
Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池
Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池
内容来源: 网络
连接池原理
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。
现在流行的第三方Java数据库连接池库
推出的
使用步骤:
& 1 添加包
添加属性资源文件,命名:dbcp.properties,文件放在src目录下
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/database
username=
password=
#&!-- 初始化连接 --&
initialSize=10
#最大连接数量
maxActive=50
#&!-- 最大空闲连接 --&
maxIdle=20
#&!-- 最小空闲连接 --&
minIdle=5
#&!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 --&
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=] 
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=utf8
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=REPEATABLE_READ
& 3 编写数据源工具类
public class DBCPUtil {
//得到数据源
private static DataSource dataS
try {
Properties pro = new Properties();
pro.load(DBCPUtil.class.getClassLoader().getResourceAsStream("dbcp.properties"));
//得到连接池对象,同时获取配置文件中的信息给连接池对象使用
dataSource = BasicDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
throw new ExceptionInInitializerError("连接池初始化失败");
//获取Connection对象的方法
public static Connection getConnection() throws SQLException
return dataSource.getConnection();
//释放资源,这里的conn.close()是将连接对象放回连接池中,并不是销毁
public static void release(Connection conn){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
它是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
c3p0与dbcp区别:dbcp没有自动回收空闲连接的功能,c3p0有自动回收空闲连接功能。
使用步骤:
c3p0-0.9.1.2.jar,下载位置:http://www.oschina.net/p/c3p0,开源中国中有详细的下载地址。
2、编写配置文件 c3p0-config.xml,文件名固定,不能更改,【C3P0百度百科】有详细配置信息,比较全。
&?xml version="1.0" encoding="UTF-8"?&
&c3p0-config&
&default-config&
&!-- 严格使用驼峰命名法,如果不是,将会出错,例如JdbcUrl就会出错。 --&
&property name="driverClass"&com.mysql.jdbc.Driver&/property&
&property name="jdbcUrl"&jdbc:mysql://127.0.0.1:3306/test&/property&
&property name="user"&&/property&
&property name="password"&&/property&
&!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --&
&property name="maxIdleTime"&60&/property&
&!--每60秒检查所有连接池中的空闲连接。Default: 0 --&
&property name="idleConnectionTestPeriod"&60&/property&
&!--两次连接中间隔时间,单位毫秒。Default: 1000 --&
&property name="acquireRetryDelay"&1000&/property&
&!--初始化时获取10个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 --&
&property name="initialPoolSize"&0&/property&
&!--最大空闲时间,30秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --&
&property name="maxIdleTime"&30&/property&
&!--连接池中保留的最大连接数。Default: 15 --&
&property name="maxPoolSize"&2&/property&
&property name="minPoolSize"&0&/property&
&property name="maxStatements"&200&/property&
&user-overrides user="test-user"&
&property name="maxPoolSize"&10&/property&
&property name="minPoolSize"&1&/property&
&property name="maxStatements"&0&/property&
&/user-overrides&
&/default-config&
&/c3p0-config&
3、编写工具类
public class C3P0Util {
private static ComboPooledDataSource cpds = new ComboPooledDataSource();
private static int i=1;
public static ComboPooledDataSource getCpds() {
return
public static Connection getConnection(){
Connection conn=null;
try {
conn=cpds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return
public static void close(Connection ct){
if(ct!=null){
try {
ct.close();
} catch (SQLException e) {
e.printStackTrace();
Tomcat内置连接池
开发JavaWeb应用,必须使用一个服务器,服务器都内置数据源。
数据源只需要配置服务器即可。
配置数据源的步骤:
1、拷贝【数据库连接的到目录下
2、配置数据源文件
  a)如果把配置信息写在下的目录的中,那么所有应用都能使用此数据源。
  b)如果是在当前应用的中创建编写数据源,那么只有当前应用可以使用。
&Resource name="jdbc/test" 
auth="Container" type="javax.sql.DataSource"
maxActive="100"
maxIdle="10" maxWait="-1"
username=""
password="" 
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://127.0.0.1:3306/test"/&
3、使用连接池
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/test");
Connection conn = ds.getConnection();
JNDI:
JNDI容器就是一个
key()
value()
path+name
path+"jdbc/day16"
DataSource对象
内容来源:
PHP开发框架
开发工具/编程工具
服务器环境java web 标签(23)
对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决我们的问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。
为什么使用连接池
连接,是我们的编程语言与数据库交互的一种方式。我们经常会听到这么一句话“数据库连接很昂贵“。
有人接受这种说法,却不知道它的真正含义。因此,下面通过实例解释它究竟是什么。
下面是Mysql数据库创建连接的的一段代码:
String&connUrl&=&jdbc:mysql://your.database.domain/yourDBname&;&&
Class.forName(&com.mysql.jdbc.Driver&);&&
Connection&con&=DriverManager.getConnection&(connUrl);&&
当我们创建了一个Connection对象,它在内部都执行了什么:
1.“DriverManager”检查并注册驱动程序;
2.“com.mysql.jdbc.Driver”就是我们注册了的驱动程序,它会在驱动程序类中调用“connect(url…)”方法。
3.com.mysql.jdbc.Driver的connect方法根据我们请求的“connUrl”,创建一个“Socket连接”,连接到IP为“your.database.domain”,默认端口3306的数据库。
4.创建的Socket连接将被用来查询我们指定的数据库,并最终让程序返回得到一个结果。
简单的获取一个连接,系统却要在背后做很多消耗资源的事情,大多时候,创建连接的时间比执行sql语句的时间还要长。
传统的获取连接方式如下图所示:
用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。
采用连接池技术后的过程如下:
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
需要注意的问题
1、并发问题
为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为各个语言自身提供了对并发管理的支持像java,c#等等,使用synchronized(java)、lock(C#)关键字即可确保线程是同步的。
2、事务处理
我们知道,事务具有原子性,此时要求对数据库的操作符合“ALL-OR-NOTHING”原则,即对于一组SQL语句要么全做,要么全不做。
我们知道当2个线程公用一个连接Connection对象,而且各自都有自己的事务要处理时候,对于连接池是一个很头疼的问题,因为即使Connection类提供了相应的事务支持,可是我们仍然不能确定那个数据库操作是对应那个事务的,这是由于我们有2个线程都在进行事务操作而引起的。为此我们可以使用每一个事务独占一个连接来实现,虽然这种方法有点浪费连接池资源但是可以大大降低事务管理的复杂性。
3、连接池的分配与释放
连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。
对于连接的管理可使用一个List。即把已经创建的连接都放入List中去统一管理。每当用户请求一个连接时,系统检查这个List中有没有可以分配的连接。如果有就把那个最合适的连接分配给他(如何能找到最合适的连接文章将在关键议题中指出);如果没有就抛出一个异常给用户,List中连接是否可以被分配由一个线程来专门管理。
4、连接池的配置与维护
连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数(minConnection)和最大连接数(maxConnection)等参数来控制连接池中的连接。比方说,最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过软件需求上得到。
如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。
Tomcat连接池
Tomcat默认使用的是DBCP数据库连接池,其实从本质上讲,Tomcat是利用Apache Commons DBCP来实现的,只不过把特定的功能集成到了tomcat-dbcp.jar包中。
使用法法如下:
在Tomcat中Context.xml中添加
&path=&/TomcatDbPools&&docBase=&TomcatDbPools&&debug=&0&&reloadable=&true&&&
&&&&&&&&&&&&&&
&&&&&&&name=&jdbc/mysql_connect&&&&&
&&&&&&&auth=&Container&&&&&&&&&&&&&
&&&&&&&type=&javax.sql.DataSource&&&&&
&&&&&&&driverClassName=&com.mysql.jdbc.Driver&&&&&
&&&&&&&url=&&jdbc:mysql://localhost:3306/test&&&&&
&&&&&&&username=&admin&&&&&
&&&&&&&password=&123456&&&&&
&&&&&&&maxActive=&100&&&&&
&&&&&&&maxIdle=&30&&&&&
&&&&&&&maxWait=&10000&&&&&
注:还可以用minIdle配置连接池中最少空闲maxIdle个连接,用initialSize配置初始化连接数目。可同时配置多个数据源。
如果在Tomcat的server.xml文件中配置数据源,有两种方法都可以实现:
方法1:将上面的配置内容直接添加在&Host&节点下。
方法2:在&GlobalNamingResources&节点下添加:
&&&&name=&mysql_connect&&&&&&&&&&&&&&&&&&&
&&&&factory=&org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory&&&
&&&&maxActive=&100&&&&
&&&&maxIdle=&30&&&&
&&&&maxWait=&10000&&&&
&&&&name=&jdbc/TomcatDbPool1&&&&
&&&&password=&123456&&&&
&&&&type=&javax.sql.DataSource&&&&
&&&&url=&jdbc:mysql://localhost:3306/test&&&&
&&&&username=&root&&&&&&&&&&&&&&&&
然后在context.xml文件中的&Context&&/Context&节点中加入如下内容:
&name=&jdbc/mysql_connect&&global=&mysql_connect&&type=&javax.sql.DataSource&&&
在server.xml中配置的数据源是全局的,所有项目都可以使用。全局的resource只是为了重用,方便所有该tomcat下的web工程的数据源管理,但如果你的tomcat不会同时加载多个web工程,也就是说一个tomcat只加载一个web工程时,是没有必要配置全局的resource的。
此外,还需要将mysql的Java驱动类以及其他依赖包(如果有)放到tomcat的lib目录下。
在web.xml中,配置&resource-ref&元素以在web应用中引用JNDI资源。&&&&
&&&&dbcpconnect&&
&&&&jdbc/mysql_connect&&&
&&javax.sql.DataSource&&
&&&Container&&
在Web应用中使用数据源
Context&ctx&=new&InitialContext();&&
DataSource&ds&=(DataSource)&ctx.lookup(&java:comp/env/jdbc/mysql_connect&&);&&
Connection&conn=&ds.getConnection();&&
conn.close();&&
DBCP连接池
DBCP 是 Apache 软件基金组织下的开源连接池实现,要使用DBCP数据源,需要应用程序应在系统中增加如下两个 jar 文件:
Commons-dbcp.jar:连接池的实现
Commons-pool.jar:连接池实现的依赖库
Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。
在类目录下加入dbcp的配置文件:dbcp.properties
#数据库驱动&&
driverClassName=com.mysql.jdbc.Driver&&
#数据库连接地址&&
url=jdbc:mysql://localhost/test&&
username=root&&
password=123456&&
#连接池的最大数据库连接数。设为0表示无限制&&
maxActive=30&&
#最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连&&
#接将被标记为不可用,然后被释放。设为0表示无限制&&
maxIdle=10&&
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制&&
maxWait=1000&&
#超过removeAbandonedTimeout时间后,是否进行没用连接(废弃)的回收(默认为false,调整为true)&&
removeAbandoned=true&&
#超过时间限制,回收没有用(废弃)的连接(默认为&300秒)&&
removeAbandonedTimeout=180&&
在获取数据库连接的工具类(如jdbcUtils)的静态代码块中创建池:
import&java.io.InputS&&
import&java.sql.C&&
import&java.sql.ResultS&&
import&java.sql.SQLE&&
import&java.sql.S&&
import&java.util.P&&
import&javax.sql.DataS&&
import&mons.dbcp.BasicDataSourceF&&
public&classJdbcUtils_DBCP&{&&
&&&&private&static&DataSource&ds&=&null;&&
&&&&static{&&
&&&&&&&&try{&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&InputStream&in&=JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream(&dbcp.properties&);&&
&&&&&&&&&&&&Properties&prop&=&new&Properties();&&
&&&&&&&&&&&&prop.load(in);&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&ds&=BasicDataSourceFactory.createDataSource(prop);&&
&&&&&&&&}catch&(Exception&e)&{&&
&&&&&&&&&&&&throw&newExceptionInInitializerError(e);&&
&&&&&&&&}&&
&&&&public&static&Connection&getConnection()throws&SQLException{&&
&&&&&&&&&&
&&&&&&&&return&ds.getConnection();&&
&&&&public&static&void&release(Connection&conn){&&
&&&&&&&&&&if(conn!=null){&&
&&&&&&&&&&&&try{&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&conn.close();&&
&&&&&&&&&&&&}catch&(Exception&e)&{&&
&&&&&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&}&&
在应用中获取连接
Connection&conn&=&null;&&
PreparedStatement&st&=&null;&&
ResultSet&rs&=&null;&&
&&&&conn&=JdbcUtils_DBCP.getConnection();&&
&&&&……&&
}catch&(Exception&e)&{&&
&&&&e.printStackTrace();&&
}finally{&&
&&&&JdbcUtils_DBCP.release(conn);&&
C3P0连接池
c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0一般是与Hibernate,Spring等框架一块使用的,当然也可以单独使用。
dbcp没有自动回收空闲连接的功能,c3p0有自动回收空闲连接功能。
使用c3p0需要导入c3p0.jar、mchange-commons-.jar,如果操作的是Oracle数据库,那么还需要导入c3p0-oracle-thin-extras-pre1.jar。
在类目录下加入C3P0的配置文件:c3p0-config.xml
&&&&&&&&&name=&driverClass&com.mysql.jdbc.Driver&&
&&&&&&&&&name=&jdbcUrl&jdbc:mysql://localhost:3306/anysearch&&
&&&&&&&&&name=&user&root&&
&&&&&&&&&name=&password&123456&&
&&&&&&&&&&&&&&&
&&&&&&&&&name=&acquireIncrement&5&&
&&&&&&&&&&&&&&&
&&&&&&&&&name=&initialPoolSize&10&&
&&&&&&&&&&&&&&&
&&&&&&&&&name=&minPoolSize&5&&
&&&&&&&&&&&&&&&
&&&&&&&&&name=&maxPoolSize&20&&
&&&&&&&&&&&&&&&
&&&&&&&&&name=&acquireRetryAttempts&30&&
&&&&&&&&&&&&&&&
&&&&&&&&&name=&acquireRetryDelay&1000&&
&&&&&&&&&&&&&&&
&&&&&&&&&&name=&autoCommitOnClose&false&&
&&&&&name=&MySQL&&&
&&&&&&&&&name=&driverClass&com.mysql.jdbc.Driver&&
&&&&&&&&&name=&jdbcUrl&jdbc:mysql://localhost:3306/test2&&
&&&&&&&&&name=&user&root&&
&&&&&&&&&name=&password&123456&&
&&&&&&&&&name=&acquireIncrement&5&&
&&&&&&&&&name=&initialPoolSize&10&&
&&&&&&&&&name=&minPoolSize&5&&
&&&&&&&&&name=&maxPoolSize&20&&
还有更多可设置的参数,具体可查阅相关资料。
在获取数据库连接的工具类(如jdbcUtils)的静态代码块中创建池
import&java.sql.C&&
import&java.sql.ResultS&&
import&java.sql.SQLE&&
import&java.sql.S&&
import&com.mchange.boPooledDataS&&
public&class&JdbcUtils_C3P0&{&&
&&&&private&static&ComboPooledDataSource&ds&=null;&&
&&&&static{&&
&&&&&&&&try{&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&ds&=&newComboPooledDataSource(&MySQL&);&&
&&&&&&&&&&&&&
&&&&&&&&}catch&(Exception&e)&{&&
&&&&&&&&&&&&throw&newExceptionInInitializerError(e);&&
&&&&&&&&}&&
&&&&public&static&Connection&getConnection()throws&SQLException{&&
&&&&&&&&&&
&&&&&&&&return&ds.getConnection();&&
&&&&public&static&void&release(Connection&conn){&&
&&&&&&&&if(conn!=null){&&
&&&&&&&&&&&&try{&&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&conn.close();&&
&&&&&&&&&&&&}catch&(Exception&e)&{&&
&&&&&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
在应用中获取连接
Connection&conn&=&null;&&
PreparedStatement&st&=&null;&&
ResultSet&rs&=&null;&&
&&&&conn&=&JdbcUtils_C3P0.getConnection();&&
&&&&……&&
}catch&(Exception&e)&{&&
&&&&e.printStackTrace();&&
}finally{&&
&&&&JdbcUtils_C3P0release(conn);&&
其他连接池
此外,还有其他的连接池可供选择,比如使用比较广泛的Proxool。Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。
proxool和 c3p0能够更好的支持高并发,但是在稳定性方面略逊于dpcp。
可根据项目的实际需要来选择连接池。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14482次
排名:千里之外
原创:25篇
(9)(2)(8)(6)(2)

我要回帖

更多关于 tomcat8 数据库连接池 的文章

 

随机推荐