问题:H2数据库搭配Tomcat JDBC连接池达上限后无法回收连接
嵌入式H2数据库连接池配置分析与补充建议
嘿,我来帮你梳理下这套嵌入式H2+连接池的配置,顺便把那个没写完的配置项讲清楚:
现有配置项解读
先拆解下你当前配置里每个参数的作用:
h2.datasource.min-idle=10:连接池会始终保持至少10个空闲连接,保证系统随时有可用连接待命h2.datasource.initial-size=10:连接池启动时就创建10个连接,和最小空闲数一致,避免启动初期的连接创建开销h2.datasource.max-active=200:这是连接池允许的最大并发连接数,用来控制数据库的连接负载上限h2.datasource.max-age=600000:连接的最长存活时间是10分钟,超过这个时间的连接会被自动销毁重建,避免长期闲置的连接出现异常h2.datasource.max-wait=3000:当所有连接都被占用时,获取连接的请求最多等待3秒,超时会抛出连接获取失败的异常h2.datasource.min-evictable-idle-time-millis=60000:空闲连接只要闲置超过1分钟,就会被连接池纳入回收候选名单h2.datasource.remove-abandoned=true:开启了遗弃连接自动回收功能,针对那些长时间没被归还的连接h2.datasource.remove-abandoned-timeout=60:如果一个连接被借出后60秒都没归还,就会被判定为"遗弃"并强制回收h2.datasource.log-abandoned=true:会记录被回收的遗弃连接信息,方便你排查代码里的连接泄漏问题
关于未完成的abandonWhenPercentageFull配置
这个参数是用来优化遗弃连接回收逻辑的,它的作用是:只有当连接池的活跃连接数占最大活跃数的比例达到设定值时,才触发遗弃连接的回收。这样可以避免在连接池还很空闲的时候就频繁执行回收操作,节省资源。
它的完整配置格式是:
h2.datasource.abandonWhenPercentageFull=80
这里的数值是0-100的整数,比如设为80的话,当活跃连接数达到200的80%(也就是160个)时,才会启动remove-abandoned的回收机制。
如果不配置这个参数,默认只要开了remove-abandoned=true,不管连接池忙不忙,都会定时检查并回收遗弃连接。结合你当前的max-active=200,建议可以设为70-80,既不会错过连接泄漏的回收,也不会在空闲时做无用功。
内容的提问来源于stack exchange,提问作者Simrandeep Singh
相关产品推荐
相关产品推荐

