brettwooldridge / HikariCP

光 HikariCP・A solid, high-performance, JDBC connection pool at last.
Apache License 2.0
19.63k stars 2.9k forks source link

Connection Timeout with Oracle/Mongo and Spring Data JPA #1352

Open hardikdesai81 opened 5 years ago

hardikdesai81 commented 5 years ago

Hello everyone,

We are facing a lot of Connection Timeout issues with Hikari Connection Pool that comes with Spring Boot 2.x. We have two databases (Mongo and Oracle) and I think they are sharing the connection pool.

Environment

HikariCP version: 2.7.9
JDK version: 1.8.0_191
Databases: Oracle and Mongo
Spring Boot: 2.0.5
Spring Data JPA: 2.0.11

Following are the Hikari Connection Pool settings that we have setup:

com.zaxxer.hikari.HikariConfig : oracle-db-connection-pool - configuration:
com.zaxxer.hikari.HikariConfig : allowPoolSuspension.............true
com.zaxxer.hikari.HikariConfig : autoCommit......................true
com.zaxxer.hikari.HikariConfig : catalog.........................none
com.zaxxer.hikari.HikariConfig : connectionInitSql...............none
com.zaxxer.hikari.HikariConfig : connectionTestQuery.............none
com.zaxxer.hikari.HikariConfig : connectionTimeout...............30000
com.zaxxer.hikari.HikariConfig : dataSource......................none
com.zaxxer.hikari.HikariConfig : dataSourceClassName.............none
com.zaxxer.hikari.HikariConfig : dataSourceJNDI..................none
com.zaxxer.hikari.HikariConfig : dataSourceProperties............{password=<masked>}
com.zaxxer.hikari.HikariConfig : driverClassName................."oracle.jdbc.OracleDriver"
com.zaxxer.hikari.HikariConfig : healthCheckProperties...........{}
com.zaxxer.hikari.HikariConfig : healthCheckRegistry.............none
com.zaxxer.hikari.HikariConfig : idleTimeout.....................10000
com.zaxxer.hikari.HikariConfig : initializationFailFast..........true
com.zaxxer.hikari.HikariConfig : initializationFailTimeout.......1
com.zaxxer.hikari.HikariConfig : isolateInternalQueries..........false
com.zaxxer.hikari.HikariConfig : jdbc4ConnectionTest.............false
com.zaxxer.hikari.HikariConfig : jdbcUrl.........................jdbc:oracle:thin:@(DESCRIPTION_LIST=(LOAD_BALANCE=off)(FAILOVER=on)(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(FAILOVER=on)(ADDRESS=(PROTOCOL=TCP)(HOST=XXXXXXXXXXXX)(PORT=XXXXXX)))(CONNECT_DATA=(SERVICE_NAME=XXXXXXXXXXX))))
com.zaxxer.hikari.HikariConfig : leakDetectionThreshold..........10000
com.zaxxer.hikari.HikariConfig : maxLifetime.....................1800000
com.zaxxer.hikari.HikariConfig : maximumPoolSize.................75
com.zaxxer.hikari.HikariConfig : metricRegistry..................none
com.zaxxer.hikari.HikariConfig : metricsTrackerFactory...........com.zaxxer.hikari.metrics.micrometer.MicrometerMetricsTrackerFactory@712ca57b
com.zaxxer.hikari.HikariConfig : minimumIdle.....................75
com.zaxxer.hikari.HikariConfig : password........................<masked>
com.zaxxer.hikari.HikariConfig : poolName........................"oracle-db-connection-pool"
com.zaxxer.hikari.HikariConfig : readOnly........................true
com.zaxxer.hikari.HikariConfig : registerMbeans..................false
com.zaxxer.hikari.HikariConfig : scheduledExecutor...............none
com.zaxxer.hikari.HikariConfig : scheduledExecutorService........internal
com.zaxxer.hikari.HikariConfig : schema..........................none
com.zaxxer.hikari.HikariConfig : threadFactory...................internal
com.zaxxer.hikari.HikariConfig : transactionIsolation............default
com.zaxxer.hikari.HikariConfig : username........................XXXXXXXX
com.zaxxer.hikari.HikariConfig : validationTimeout...............5000

Following is the exception stack trace:

2019-04-03 17:56:24 [http-nio-8080-exec-129] ERROR   o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection] with root cause java.sql.SQLTransientConnectionException: oracle-db-connection-pool - Connection is not available, request timed out after 30018ms.
 at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:669)
 at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:183)
 at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:148)
 at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
 at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
 at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
 at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:106)
 at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:136)
 at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:254)
 at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:262)
 at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:214)
 at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:56)
 at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:162)
 at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:400)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:378)
 at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:474)
 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:289)
 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
 at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
 ...
 at sun.reflect.GeneratedMethodAccessor284.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:891)
 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
 at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.springframework.web.filter.AbstractRequestLoggingFilter.doFilterInternal(AbstractRequestLoggingFilter.java:246)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
 ...
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
 at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
 at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:176)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
 at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
 at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
 at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
 at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:155)
 at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:123)
 at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:108)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 ...
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 at java.lang.Thread.run(Thread.java:748)

Please help us move forward with this problem. Any help is deeply appreciated.

Thanks, Hardik

brettwooldridge commented 5 years ago

I recommend enabling debug logging for HikariCP. It should provide more information about the reason for the failure.

Please post relevant sections of the log here or attach a log file (zipped).

NitishBangera commented 5 years ago

Hi Hardik,

There are two scenarios.

  1. If your pool gets initialized at the start of the app and at that time if you see the connection time out then the database that you are connecting to has exhausted connections.
  2. If the the pool was initialized properly at the start and during the run, you see the connection timeout then its a case of long running queries. All the connections in the pool are busy executing a query which hasn't completed. You can debug this issue using the hikari housekeeping worker which would tell you how many connections in the pool are Active, idle and how many jobs are waiting for a connection from the pool.

Thanks, Nitish

On Sat, 6 Apr, 2019, 1:13 PM Brett Wooldridge, notifications@github.com wrote:

I recommend enabling debug logging for HikariCP. It should provide more information about the reason for the failure.

Please post relevant sections of the log here or attach a log file (zipped).

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/brettwooldridge/HikariCP/issues/1352#issuecomment-480483203, or mute the thread https://github.com/notifications/unsubscribe-auth/AA9kWsIraQAjCkId-lXQiipUxIjRni76ks5veFAugaJpZM4cb0Gs .

habutre commented 3 years ago

Hi @NitishBangera & @brettwooldridge

I would like to confirm that behavior using MySQL and Mongo DB My use case happens when I have a huge amount of DB operations targeting Mongo, sometimes I had to reprocess some data and then I fall in the same basket of @hardikdesai81 In such reprocessing MySQL is not even invoked only Mongo is involved in the transactions so why the Hikari looks like to be managing the mongo connections? Would that be a Spring Data issue?

HikariCP version: 3.2.0
JDK version: openjdk:11-jdk (docker image)
Databases: Mysql and Mongo
Spring Boot: 2.1.9
Spring Data JPA: 2.1.19
Spring Data Mongodb 2.1.19

Pool config:

HikariPool-1 - Starting...
validationTimeout...............5000
username........................"the-username"
transactionIsolation............default
threadFactory...................internal
schema..........................none
scheduledExecutor...............none
registerMbeans..................false
readOnly........................false
poolName........................"HikariPool-1"
password........................<masked>
minimumIdle.....................10
metricsTrackerFactory...........none
metricRegistry..................none
maximumPoolSize.................10
maxLifetime.....................1800000
leakDetectionThreshold..........0
jdbcUrl.........................jdbc:mysql://db-server.acme.com:3306/the-user?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
isolateInternalQueries..........false
initializationFailTimeout.......1
idleTimeout.....................600000
healthCheckRegistry.............none
healthCheckProperties...........{}
driverClassName................."com.mysql.jdbc.Driver"
dataSourceProperties............{password=<masked>}
dataSourceJNDI..................none
dataSourceClassName.............none
dataSource......................none
connectionTimeout...............30000
connectionTestQuery.............none
connectionInitSql...............none
catalog.........................none
autoCommit......................true
allowPoolSuspension.............false
HikariPool-1 - configuration:

Logs:

HikariPool-1 - Timeout failure stats (total=10, active=10, idle=0, waiting=193)
SQL Error: 0, SQLState: null
HikariPool-1 - Connection is not available, request timed out after 30000ms.
(... many many failures logged ..)
HikariPool-1 - Timeout failure stats (total=10, active=10, idle=0, waiting=270)
CodeMSC commented 2 years ago

Could you try to use driver manager to get a connection from the oracle database Instead of jdbctemplate.getConnection() Connection con = DriverManager.getConnection("URL", "USERNAME","PASSWORD");

ricksonmenezes commented 8 months ago

Had the same issue today. Our mongoDB database connections got choked. We do not have a custom connection pool for it. We do have HikariCP for mySQL. And curiously, Hikari threw an exception for a mongoDB connection which is the same pattern I see above

rent connection leak detected at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128) 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:104) at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:134) at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:259) at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:267) 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 org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:184) at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:402) at org.springframework.transaction.support.AbstractPlatformTransactionManager.startTransaction(AbstractPlatformTransactionManager.java:400) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:574) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:361) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) at com.hifinite.components.device.service.DeviceRawReadingJsonService$$**EnhancerBySpringCGLIB$$6def0426.insertDeviceRawReadingJson(<generated>)**

The method DeviceRawReadingJsonService is a insert into MongoDB. Not sure why Hikari is closing or complaiing about this connection's leak.