如何避免Tomcat中JDBC数据源执行验证查询?
问题分析与解决方案
配置存在的核心问题
参数名不符合Tomcat连接池规范
你当前用的参数名是其他连接池(比如Commons DBCP或IBM数据源)的命名,Tomcat默认的JDBC连接池(org.apache.tomcat.jdbc.pool.DataSource)不识别这些参数,导致你的验证关闭配置没被正确加载,连接池仍用默认验证逻辑:- 驱动类参数应为
driverClassName,而非jdbcDriver - JDBC连接地址应为
url,而非jdbcUrl - 数据库用户名应为
username,而非userName
- 驱动类参数应为
无效参数冗余
配置里的ignoreMe、ignoreMe2、ignoreMe3是无效自定义参数,建议删除,避免干扰连接池初始化流程。connectionProperties可能隐含验证配置
你设置的connectionProperties = myConnectionProperties中,可能包含DB2 JDBC驱动自带的连接验证参数(比如validateConnection=true)。如果驱动层面开了验证,就算连接池的验证开关关闭,还是会执行验证查询,得检查该属性的具体内容并移除相关验证项。
关于增大validationInterval的可行性
如果确实没法彻底关闭验证查询,增大validationInterval的数值是可行的。这个参数定义了两次连接验证的最小间隔时间,在间隔内若连接被使用过,就不会重复执行验证。增大它能有效降低验证查询的执行频率,减轻数据库压力,但没法完全消除验证行为。
修正后的参考配置
<Resource id="myDataSource" type="javax.sql.DataSource" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://myjdbcUrl" username="myUser" password="xxxx" passwordCipher="Static3DES" defaultAutoCommit="true" initialSize="2" maxTotal="15" maxIdle="15" maxWaitMillis="1" minIdle="0" testOnBorrow="false" testOnReturn="false" testWhileIdle="false" logValidationErrors="true" removeAbandoned="true" removeAbandonedTimeout="65" logAbandoned="true" minEvictableIdleTimeMillis="65000" timeBetweenEvictionRunsMillis="35000" validationInterval="35000" numTestsPerEvictionRun="3" />
内容的提问来源于stack exchange,提问作者raic
相关产品推荐
相关产品推荐

