I am trying to send alerts when connection leaks occur from hikaricp. I got to the point where I can see exception logs. But I am unable to catch those exceptions in a meaningful way so I can build a message and send as email.
I don't want to use generic @ExceptionHandler because HikariCP builds a generic exception and throws it. I want to be able to access underlying DataSource objects etc. so I can build a meaningful message.
[2023-09-06 05:11:01.137] WARN [HikariPool-24--[DBConfig.class]--ReadOnly housekeeper] com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for org.postgresql.jdbc.PgConnection@443be07d on thread taskExecutor-2, stack trace follows
java.lang.Exception: Apparent connection leak detected
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:100)
at net.ttddyy.dsproxy.support.ProxyDataSource.getConnection(ProxyDataSource.java:72)
at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:38)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:108)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:138)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:276)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:284)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:246)
at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:83)
at com.company.solr.SolrImportationTask.getDelta(SolrImportationTask.java:233)
at com.company.solr.SolrImportationTask.run(SolrImportationTask.java:141)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Is there a way to capture connection leak exception? I can add any other dependency on top of HikariCP, if you recommend them.