Tomcat-Jdbc-Pool连接池参数说明
原文 http://liuxing.info/2016/01/05/Tomcat-Jdbc-Pool参数说明/
转载收藏用,如有侵权,请联系删除,谢谢。
介绍
Tomcat 在 7.0 以前的版本都是使用commons-dbcp做为连接池的实现,但是DBCP存在一些问题:
- DBCP 是单线程的,为了保证线程安全会锁整个连接池
- DBCP 性能不佳
- DBCP 太复杂,超过60个类,发展滞后。
因此,通常J2EE中还会使用其它的高性能连接池,如C3P0,还有阿里系的druid等。
为此,Tomcat 从 7.0 开始引入一个新的模块: Tomcat Jdbc Pool
Tomcat Jdbc Pool 近乎兼容 DBCP,性能更高
- 异步方式获取连接
- Tomcat Jdbc Pool是Tomcat的一个模块,基于Tomcat-Juli,使用Tomcat的日志框架
- 使用 javax.sql.PooledConnection 接口获取连接
- 支持高并发应用环境
- 超简单,核心文件只有8个,比 c3p0 还少
- 更好的空闲连接处理机制
- 支持 JMX
- 支持 XA Connection。
- Tomcat Jdbc Pool 可在 Tomcat 中直接使用,也可以在独立的应用中使用。
属性
通用属性
|
属性名 |
描述(DBCP/Tomcat jdbc-pool 差别 ) |
DBCP默认值 |
jdbc-pool默认值 |
|
username |
用户名 |
- |
- |
|
password |
密码 |
- |
- |
|
url |
建立连接的URL |
- |
- |
|
driverClassName |
驱动的完整有效的java类名 |
- |
- |
|
connectionProperties |
(String) 当建立新连接时被发送给JDBC 驱动的连接参数,格式必须是 [propertyName=property;]*注意 :参数user/password 将被明确传递,所以不需要包括在这里。 |
- |
- |
|
defaultAutoCommit |
(boolean) 连接池创建的连接的默认的auto-commit 状态 |
true |
driver default |
|
defaultReadOnly |
(boolean) 连接池创建的连接的默认的read-only 状态。 如果没有设置则setReadOnly 方法将不会被调用。 ( 某些驱动不支持只读模式, 比如:Informix) |
driver default |
driver default |
|
defaultTransactionIsolation |
(String) 连接池创建的连接的默认的TransactionIsolation 状态。 下面列表当中的某一个: ( 参考javadoc) |
driver default |
driver default |
|
defaultCatalog |
(String) 连接池创建的连接的默认的catalog |
- |
driver default |
|
initialSize |
(int) 初始化连接: 连接池启动时创建的初始化连接数量,1。2 版本后支持 |
0 |
10 |
|
maxActive |
(int) 最大活动连接: 连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制 |
8 |
100 |
|
maxIdle |
(int) 最大空闲连接: 连接池中容许保持空闲状态的最大连接数量, 超过的空闲连接将被释放, 如果设置为负数表示不限制 |
8 |
与maxActive相同 |
|
minIdle |
(int) 最小空闲连接: 连接池中容许保持空闲状态的最小连接数量, 低于这个数量将创建新的连接, 如果设置为0 则不创建 |
0 |
与initialSize 相同 |
|
maxWait |
(int) 最大等待时间: 当没有可用连接时, 连接池等待连接被归还的最大时间( 以毫秒计数), 超过时间则抛出异常, 如果设置为-1 表示无限等待 |
无限 |
30000(30秒) |
|
validationQuery |
(String) SQL 查询, 用来验证从连接池取出的连接, 在将连接返回给调用者之前。 如果指定, 则查询必须是一个SQL SELECT 并且必须返回至少一行记录 |
- |
- |
|
testOnBorrow |
(boolean) 指明是否在从池中取出连接前进行检验, 如果检验失败, 则从池中去除连接并尝试取出另一个。注意: 设置为true |
true |
false |
|
testOnReturn |
(boolean) 指明是否在归还到池中前进行检验 注意: 设置为true 后如果要生效,validationQuery 参数必须设置为非空字符串 |
false |
false |
|
testWhileIdle |
(boolean) 指明连接是否被空闲连接回收器( 如果有) 进行检验。 |
false |
false |
|
timeBetweenEvictionRunsMillis |
(int) 在空闲连接回收器线程运行期间休眠的时间值, 以毫秒为单位。 如果设置为非正数, 则不运行空闲连接回收器线程 |
-1 |
5000(5秒) |
|
numTestsPerEvictionRun |
(int) 在每次空闲连接回收器线程( 如果有) 运行时检查的连接数量 |
false |
未使用 |
|
minEvictableIdleTimeMillis |
连接在池中保持空闲而不被空闲连接回收器线程( 如果有) 回收的最小时间值,单位毫秒 |
1000 6030(30分钟) |
60000(60秒) |
|
poolPreparedStatements |
(boolean) 开启池的prepared statement 池功能 |
false |
未使用 |
|
maxOpenPreparedStatements |
(int)statement 池能够同时分配的打开的statements 的最大数量, |
不限制 |
未使用 |
|
accessToUnderlyingConnectionAllowed |
(boolean) 控制PoolGuard 是否容许获取底层连接 |
false |
未使用 |
|
removeAbandoned |
(boolean) 标记是否删除泄露的连接, 如果他们超过了removeAbandonedTimout 的限制。 如果设置为true, 连接被认为是被泄露并且可以被删除, 如果空闲时间超过removeAbandonedTimeout。 |
false |
false |
|
removeAbandonedTimeout |
(int) 泄露的连接可以被删除的超时值, 单位秒应设置为应用中查询执行最长的时间 |
300 |
60 |
|
logAbandoned |
(boolean) 标记当Statement 或连接被泄露时是否打印程序的stack |
false |
false |
Tomcat jdbc-pool 新增属性
|
属性名 |
描述 |
默认值 |
|
validatorClassName |
(String)实现org.apache.tomcat.jdbc.pool.Validator接口的类名,必须存在默认或明确的无参构造方 |
- |
|
initSQL |
(String) 当连接第一次建立时执行的SQL |
- |
|
jdbcInterceptors |
(String)(jdbc拦截器——jdbc-pool的高级扩展属 |
- |
|
validationInterval |
(long) 避免过度验证,保证验证不超过这个频率——以毫秒为单位。如果一个连接应该被验证,但上次验证未达到指定间隔,将不再次验证。 |
30000(30秒) |
|
jmxEnabled |
(boolean) 是否将连接注册到JMX |
true |
|
fairQueue |
(boolean) 如果被设为true ,getConnection 方法将被以先进先出的方式对待。此属性使用 org.apache.tomcat.jdbc.pool.FairBlockingQueue 实现闲置连接列表。 |
true |
|
abandonWhenPercentageFull |
(int)正在被使用的连接超过这个百分比以前被丢弃的连接不会被断开或报告。这个值应被设为0-100之间。默认值为0,意味着达到 removeAbandonedTimeout 时将被尽快关闭。 |
0 |
|
maxAge |
(long)保持连接的最大毫秒数。当一个连接被归还时,连接池将检查是否满足:现在时间-连接时长>maxAge,如果条件满足,连接将被关闭而不是回到池中。默认值为0,标识禁用该功能。 |
0 |
|
useEquals |
(boolean)如果希望ProxyConnection类使用String.equals方法对比方法名,设为true;否则将使用==判断。这个属性不会影响单独配置的拦截器。 |
true |
|
suspectTimeout |
(int)以秒为单位的超时时间(怀疑超时)。类似 removeAbandonedTimeout,但不会将连接丢弃甚至关闭,如果logAbandoned为true,则 只是记录一个警告。如果这个值小于等于0,不会有怀疑超时检测被执行。怀疑检测只有当超时时间大于0并且连接未丢弃,或者丢弃检测被禁用的情况下才占用空间。如果一个连接被怀疑,将记录一条警告消息,并发送一个JMX通知。 |
0 |
|
rollbackOnReturn |
(boolean)如果autoCommit==false,当连接被归还时,通过调用连接的rollback方法中断事务。 |
false |
|
commitOnReturn |
(boolean)如果autoCommit==false,当连接被归还时,通过调用连接的commit方法完成事务。如果rollbackOnReturn==ture,这个属性将被忽略。 |
false |
|
alternateUsernameAllowed |
(boolean)为了提高性能,默认情况下,jdbc-pool将忽略 |
false |
|
dataSource |
(javax.sql.DataSource)向连接池注入一个数据源,连接池将使用这个数据源索取连接,而不是通过java.sql.Driver接口建立。当您希望池化XA连接或者使用数据源而不是url时,这个属性非常有用。 |
- |
|
dataSourceJNDI |
(String)用来建立数据连接的JNDI名称。参考dataSource属性。 |
- |
|
useDisposableConnectionFacade |
(boolean)如果您希望在连接上建立一道屏障防止连接关闭之后被重新使用,设置这个属性为true。这个属性用来预防线程保持已关闭连接的引用,并在上面执行查询动作。 |
true |
|
logValidationErrors |
(boolean)如果设置为true,将在验证相位时向日志文件写入错误。如果值为true,错误将被记录为SEVER。默认值是false以向后兼容。 |
false |
|
propagateInterruptState |
(boolean)设置这个属性为true,可以传播一个被中断的线程(还没有清除中断状态)的中断状态。默认值为false以向后兼容。 |
false |
样例
<bean id="parentDataSource" abstract="true" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"
p:maxWait="5000"
p:removeAbandoned="true"
p:removeAbandonedTimeout="180"
p:connectionProperties="clientEncoding=UTF-8"
p:validationQuery="SELECT 1"
p:validationQueryTimeout="1"
p:validationInterval="30000"
p:testOnBorrow="false"
p:testOnReturn="false"
p:testWhileIdle="true"
p:timeBetweenEvictionRunsMillis="10000"
p:minEvictableIdleTimeMillis="60000"
p:numTestsPerEvictionRun="20"
p:logAbandoned="false"
p:jmxEnabled="true"
p:defaultAutoCommit="true"/>
<bean id="dataSource" parent="parentDataSource"
p:driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
p:url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test;sendStringParametersAsUnicode=false"
p:username="test"
p:password="test"
p:initialSize="100"
p:maxActive="500"
p:maxIdle="100"
p:minIdle="50" />
Tomcat-Jdbc-Pool连接池参数说明的更多相关文章
- c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包
[-] DBCP连接池配置 dbcp jar包 c3p0连接池配置 c3p0 jar包 jdbc-pool连接池配置 jdbc-pool jar包 常用数据库的driverClass和jdbcUrl ...
- DBCP,C3P0与Tomcat jdbc pool 连接池的比较
hibernate开发组推荐使用c3p0; spring开发组推荐使用dbcp(dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect,告诉连接被重置 ...
- spring配置tomcat jdbc pool数据库连接池
<bean id="sqliteDataSource" class="org.apache.tomcat.jdbc.pool.DataSource" de ...
- Tomcat jdbc pool配置
Tomcat jdbc pool是apache在tomcat7版本中启用的新连接池,用它来解决以往DBCP无法解决的一些问题. Tomcat jdbc pool的优点: (1) tomcat j ...
- 使用 Tomcat 7 新的连接池 —— Tomcat jdbc pool
Tomcat 在 7.0 以前的版本都是使用 commons-dbcp 做为连接池的实现,但是 dbcp 饱受诟病,原因有: dbcp 是单线程的,为了保证线程安全会锁整个连接池 dbcp 性能不佳 ...
- 连接池c3p0 ,Proxool ,Druid ,Tomcat Jdbc Pool对比测试
这次所要做的测试是比较几种我们常用的数据库连接池的性能,他们分别是:c3p0 ,Proxool ,Druid ,Tomcat Jdbc Pool这四种,测试将采用统一的参数配置力求比较“公平”的体现统 ...
- Tomcat7 新的数据库连接池Tomcat jdbc pool介绍和配置
Tomcat 在 7.0 以前的版本都是使用commons-dbcp做为连接池的实现,但是 dbcp存在一些问题: (1)dbcp 是单线程的,为了保证线程安全会锁整个连接池 (2)dbcp 性能不佳 ...
- Tomcat上配置连接池{ connect error=Name [jdbc/OracleDB] is not bound in this Context. Unable to find [jdbc]}
. 在学习期间,从未实践过在tomcat上配置连接池,今天终于实现一次,在tomcat玩了一把,不知道你是否现在有和我一样的困境.废话少说直接上代码 java public static Con ...
- JDBC数据源连接池(3)---Tomcat集成DBCP
此文续<JDBC数据源连接池(2)---C3P0>. Apache Tomcat作为一款JavaWeb服务器,内置了DBCP数据源连接池.在使用中,只要进行相应配置即可. 首先,确保Web ...
随机推荐
- 安装java 和 eclipse
昨天安装eclipse出现个问题, 安装完了创建第一个项目目录的时候弹窗报错an ......什么什么, 百度一堆没有用,后来发现是jdk12不支持,换了jdk8就可以了, 然后eclipse安装py ...
- C语言实例解析精粹学习笔记——39(简单的文本编辑器)
实例说明: 编辑一个简单的单行文本编辑器,编辑命令有以下几种:(E.Q.R.I.D) 只有自己在完全空白的情况下编写出来的程序,才是真正自己会的程序,现在所做的,不过是程序的搬运工,把书上的程序搬到网 ...
- 【Leetcode】605. Can Place Flowers
Description Suppose you have a long flowerbed in which some of the plots are planted and some are no ...
- Xshell 清除历史记录方法
使用电脑久了,就会清理电脑,将一些历史记录清除,使得电脑可以运行的更快,Xshell也是同样的道理.本集小编就教大家如何清除xshell的历史记录. 如何清除历史记录: 1.打开xshell,然后点击 ...
- JAVA大作业汇总3
JAVA大作业3 代码 ``` package thegreatwork; import java.util.; import java.io.; /Board.java 目的:里面有一些关于如何移动 ...
- Spring MVC: 环境搭建并实现简易的HelloWorld
第一步:使用配置Tomcat服务器的Eclipse新建一个名为“TestSpringMVC”的web项目 第二步:将所使用的jar包复制到WEB-INF/lib目录下 第三步:在web.xml中配置D ...
- Bug是一种财富-------研发同学的错题集、测试同学的遗漏用例集
此文已由作者王晓明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 各位看官,可能看到标题的你一定认为这是一篇涉嫌"炒作"的文章,亦或是为了吸引眼球而起的标 ...
- 「日常训练」 Soldier and Number Game (CFR304D2D)
题意 (Codeforces 546D) 给定一个数x=a!b!" role="presentation">x=a!b!x=a!b!的形式,问其中有几个质因数. 分 ...
- tp5.0 模型查询数据的返回类型,分页
一开始用painate()这个函数的时候,发现有的查询方式不能使用这个函数,由此了解到了模型查询和普通查询返回类型的不同 1.原生查询方法 Db::query("select * from ...
- 阿里云ECS下基于Centos7.4安装MySQL5.7.20
1.首先登录阿里云ECS服务器,如下图所示: 2.卸载MariaDB 说明:CentOS7.x默认安装MariaDB而不是MySQL,而且yum服务器上也移除了MySQL相关的软件包.因为Maria ...