Tomcat连接池配置技巧
基础参数是连接池稳定运行的核心,需根据应用的并发需求和数据库资源调整:
NoSuchElementException。需根据应用的容错能力设置(如10秒内无法获取连接则提示用户重试)。minIdle的50%-80%。数据库连接可能因超时、网络问题等原因失效,需通过以下参数确保获取的连接可用:
SELECT 1,Oracle用SELECT 1 FROM dual,SQL Server用SELECT 1。该语句需快速执行(避免影响性能)。true可确保借用的连接是有效的,但会增加每次借用的开销(需执行validationQuery)。建议在高并发场景下设为false,结合testWhileIdle使用。true可在连接空闲时自动检查(通过timeBetweenEvictionRunsMillis设置的间隔),移除失效连接。适合低并发场景,减少无效连接的占用。validationQueryTimeout(避免检查超时),建议设置为30秒-5分钟(如30000毫秒)。连接泄漏(未正确关闭连接)会导致连接池资源耗尽,需通过以下参数检测和处理:
true后,连接池会跟踪连接的借用时间,超过removeAbandonedTimeout的连接会被视为泄漏并强制回收。true可帮助定位泄漏代码(如哪个类、哪行代码未关闭连接),便于修复。Tomcat自带连接池(Tomcat JDBC Pool)性能优秀,但在高并发场景下,HikariCP(轻量级、高性能)是更好的选择:
context.xml中配置):<Resource name="jdbc/MyDB"
auth="Container"
type="javax.sql.DataSource"
factory="com.zaxxer.hikari.HikariJNDIFactory"
maximumPoolSize="100" <!-- 最大连接数 -->
minimumIdle="10" <!-- 最小空闲连接数 -->
idleTimeout="30000" <!-- 空闲连接超时时间(毫秒) -->
connectionTimeout="10000" <!-- 连接超时时间(毫秒) -->
jdbcUrl="jdbc:mysql://localhost:3306/mydb"
username="dbuser"
password="dbpassword"/>
HikariCP的优势在于更少的资源消耗和更高的吞吐量(比Tomcat JDBC Pool快20%以上),适合对性能要求极高的场景。通过JMX(Java Management Extensions)监控连接池的运行状态,及时发现性能瓶颈:
catalina.sh(Linux)或catalina.bat(Windows)中添加以下JVM参数:-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
activeCount(活跃连接数)、idleCount(空闲连接数)、waitCount(等待连接数)等指标,判断是否需要调整参数(如maxActive是否过小导致等待连接数过多)。connectionTimeout(获取连接超时)和validationQueryTimeout(验证查询超时)需根据网络环境和数据库性能设置。例如,数据库响应慢时,可适当增加validationQueryTimeout(如从3秒增加到5秒),避免误判连接失效。username和password是敏感信息,建议通过加密(如Jasypt)或环境变量存储,避免明文暴露在配置文件中。