您的位置:首页 > 运维架构 > Tomcat

apache tomcat jdbc-pool如何使用及其属性解释

2016-02-14 14:35 477 查看
sping的配置文件中这样写,数据源配置,mysql的数据源

<bean id="calMysqlDataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
<property name="driverClassName" value="${calMysql.jdbc.driver}" />
<property name="url" value="${calMysql.jdbc.url}" />
<property name="username" value="${calMysql.jdbc.username}" />
<property name="password" value="${calMysql.jdbc.password}" />
<property name="validationQuery" value="${calMysql.validationQuery}"/>
<property name="maxActive" value="${calMysql.jdbc.pool.maxActive}" />
<property name="maxIdle" value="${calMysql.jdbc.pool.maxIdle}" />
<property name="removeAbandoned" value="true"/>
<property name="initialSize" value="10"/>
<property name="maxWait" value="10000"/>
<property name="removeAbandonedTimeout" value="60"/>
<property name="minIdle" value="0" />
<property name="defaultAutoCommit" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="600000" />
</bean>


tomcat jdbc-pool 的属性很多,

有如下这些:

private volatile Properties dbProperties = new Properties();
private volatile String url = null;
private volatile String driverClassName = null;
private volatile Boolean defaultAutoCommit = null;
private volatile Boolean defaultReadOnly = null;
private volatile int defaultTransactionIsolation = DataSourceFactory.UNKNOWN_TRANSACTIONISOLATION;
private volatile String defaultCatalog = null;
private volatile String connectionProperties;
private volatile int initialSize = 10;
private volatile int maxActive = DEFAULT_MAX_ACTIVE;
private volatile int maxIdle = maxActive;
private volatile int minIdle = initialSize;
private volatile int maxWait = 30000;
private volatile String validationQuery;
private volatile int validationQueryTimeout = -1;
private volatile String validatorClassName;
private volatile Validator validator;
private volatile boolean testOnBorrow = false;
private volatile boolean testOnReturn = false;
private volatile boolean testWhileIdle = false;
private volatile int timeBetweenEvictionRunsMillis = 5000;
private volatile int numTestsPerEvictionRun;
private volatile int minEvictableIdleTimeMillis = 60000;
private volatile boolean accessToUnderlyingConnectionAllowed = true;
private volatile boolean removeAbandoned = false;
private volatile int removeAbandonedTimeout = 60;
private volatile boolean logAbandoned = false;
private volatile String name = "Tomcat Connection Pool["+(poolCounter.addAndGet(1))+"-"+System.identityHashCode(PoolProperties.class)+"]";
private volatile String password;
private volatile String username;
private volatile long validationInterval = 30000;
private volatile boolean jmxEnabled = true;
private volatile String initSQL;
private volatile boolean testOnConnect =false;
private volatile String jdbcInterceptors=null;
private volatile boolean fairQueue = true;
private volatile boolean useEquals = true;
private volatile int abandonWhenPercentageFull = 0;
private volatile long maxAge = 0;
private volatile boolean useLock = false;
private volatile InterceptorDefinition[] interceptors = null;
private volatile int suspectTimeout = 0;
private volatile Object dataSource = null;
private volatile String dataSourceJNDI = null;
private volatile boolean alternateUsernameAllowed = false;
private volatile boolean commitOnReturn = false;
private volatile boolean rollbackOnReturn = false;
private volatile boolean useDisposableConnectionFacade = true;
private volatile boolean logValidationErrors = false;
private volatile boolean propagateInterruptState = false;
private volatile boolean ignoreExceptionOnPreLoad = false;


根据官方文档的说明,我个人对一些属性做出中文解释,比google翻译要正常一点。

url, driverClassName, username, password
这些属性知道jdbc的同学,我就不解释了。

name


连接池的名称

defaultAutoCommit


指定由连接池所创建的连接的自动提交(auto-commit)状态。

DefaultReadOnly


由连接池所创建的连接对数据库的只读属性

DefaultTransactionIsolation


指定由连接池所创建的连接的事务级别(TransactionIsolation)。可用值为下列之一:(详情可见javadoc)

NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZA

JmxEnabled


开启jmx的管理功能

TestWhileIdle


会使用测试线程,测试池中连接是否能够正常使用。

ValidationQuery


指定连接进入空闲状态时是否经过空闲对象驱逐进程的校验(如果存在空闲对象驱逐进程)。如果校验未通过,则该连接被连接池断掉。

注意:要想值为true时该设置生效,则validationQuery参数必须为一个非空字串。

TestOnBorrow


指定连接被调用时是否经过校验。如果校验未通过,则该连接被连接池断掉,并由连接池尝试调用另一个连接。

指定连接返回到池中时是否经过校验。

注意:要想值为true时该设置生效,则validationQuery参数必须为一个非空字串。

TestOnReturn


指定连接返回到池中时是否经过校验。

注意:要想值为true时该设置生效,则validationQuery参数必须为一个非空字串。

ValidationInterval


以毫秒为单位验证时间间隔。

TimeBetweenEvictionRunsMillis


以毫秒表示的空闲对象驱逐进程由运行状态进入休眠状态的数值。值为非正数时表示不运行任何空闲对象驱逐进程。

MaxActive


池中 工作连接的最大个数,此值为非正数是表述不限制

InitialSize


以毫秒表示的当连接池中没有可用连接时等待可用连接返回的时间,超时则抛出异常,值为-1时无限期等待。

MaxWait


以毫秒表示的当连接池中没有可用连接时等待可用连接返回的时间,超时则抛出异常,值为-1时无限期等待。

MinIdle


池中最小空闲连接数,当连接数少于此值时,池会创建连接来补充到该值的数量

MaxIdle


池中允许的最大连接数,值为非正数时表示不限制

NumTestsPerEvictionRun


连接池检查每个空闲对象驱逐进程的对象数量(如果存在空闲对象驱逐进程)

MinEvictableIdleTimeMillis


以毫秒表示的连接被空闲对象驱逐进程驱逐前在池中保持空闲状态的最小时间(如果存在空闲对象驱逐进程)。

LogAbandoned


当清除无效连接时是否在日志中记录清除信息的标志。 记录无效的语句和连接,并附加每个连接开启或新建一个语句的系统开销。如果你启用了“removeAbandoned”,可能会导致被设为无效的连接被连接池回收。

这个机制将会在满足下列两个条件时启动:(getNumIdle() < 2) 和 (getNumActive() > getMaxActive() - 3)

例如:假设maxActive=20,而当前已经拥有18个活动连接,1个空闲连接,“removeAbandoned”机制将会启动。 但是只有在活动连接没有使用的时长超过“removeAbandonedTimeout”(默认为300秒)的连接被清除。在遍历结果集时,所使用的连接不会被标为活动连接。

RemoveAbandoned


是否清除已经超过“removeAbandonedTimout”设置的无效连接。

如果值为“true”则超过“removeAbandonedTimout”设置的无效连接将会被清除。设置此属性可以从那些没有合适关闭连接的程序中恢复数据库的连接。

记录无效的语句和连接,并附加每个连接开启或新建一个语句的系统开销。

RemoveAbandonedTimeout


以秒表示的清除无效连接的时限。

JdbcInterceptors


设置 tomcat jdbc 连接池的拦截器。

内置的拦截器:
org.apache.tomcat.jdbc.pool.interceptor.ConnectionState


追踪自动提交、只读状态、catalog和事务隔离等级等状态

org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer


追踪打开的statement,当连接被归还时关闭它们.

多个拦截器用;分割,例如:

poolProps.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer);


dataSourceJNDI


指定一个 jndi 作为数据源

accessToUnderlyingConnectionAllowed


不懂。以上属性当你我无法理解的时候,最好保持默认值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: