连接池参数配置是优化的基础,需结合应用并发需求与数据库资源限制调整:
max_connections(如MySQL默认151),避免连接风暴。SELECT 1,Oracle用SELECT 1 FROM DUAL),确保从池中取出的连接可用。通过定期检查与借用时验证,确保连接池中的连接有效:
true,在空闲连接回收线程运行时检查连接有效性(需配合timeBetweenEvictionRunsMillis使用),避免将无效连接分配给应用。true,在从池中借用连接时检查有效性(如执行validationQuery),若失败则丢弃并重新获取,适合对连接可靠性要求高的场景。连接泄漏(如未关闭连接)会导致池中连接数耗尽,需开启检测与回收:
true,开启连接泄漏检测,当连接数达到(maxActive - 3)且空闲连接少于2时,启动回收。true,回收泄漏连接时打印堆栈日志,帮助定位泄漏代码(如未在finally块中关闭连接)。Tomcat自带DBCP连接池适合常规场景,但HikariCP(轻量级、高性能)更适合高并发需求:
<Context>
<Resource name="jdbc/MyDB"
auth="Container"
type="javax.sql.DataSource"
factory="com.zaxxer.hikari.HikariJNDIFactory"
maximumPoolSize="100"
minimumIdle="10"
idleTimeout="30000"
connectionTimeout="10000"
username="dbuser"
password="dbpass"
jdbcUrl="jdbc:mysql://localhost:3306/mydatabase"/>
</Context>
HikariCP的关键优势:更少的资源消耗、更快的连接获取速度(约1ms vs DBCP的5-10ms),适合高并发场景。通过监控识别瓶颈,持续调整参数:
-Dcom.sun.management.jmxremote),监控连接池的activeCount(活跃连接数)、idleCount(空闲连接数)、waitCount(等待连接数)等指标,及时发现连接耗尽或闲置过多问题。logAbandoned=true),记录泄漏连接的创建堆栈,帮助快速定位问题。maxActive×0.3),避免应用启动时频繁创建连接,缩短启动时间。通过以上优化措施,可显著提升Tomcat数据库连接池的性能与稳定性,减少资源浪费,应对高并发场景的需求。需注意的是,参数调整需结合实际业务场景与压测结果,避免盲目照搬配置。