Failed to validate connection org.postgresql.jdbc.PgConnection@14b2d52a (This connection has been closed.). Possibly consider using a shorter maxLifetime

Hi All,

The following error has been observed in camunda logs. can anyone please help us to resolve this issue.

Failed to validate connection org.postgresql.jdbc.PgConnection@14b2d52a
(This connection has been closed.). Possibly consider using a shorter maxLifetime value.",“context”:“default”}

Spring-Boot: (v2.1.2.RELEASE)
Camunda BPM: (v7.12.0)
Camunda BPM Spring Boot Starter: (v3.4.1)

spring:
  datasource:
    databaseSchemaUpdate: false
    driver-class-name: org.postgresql.Driver
    hikari:
      maximum-pool-size: 50
      transaction-isolation: TRANSACTION_READ_COMMITTED
    url: jdbc:postgresql://camunda.net:5432/camundadev
    username: test
    password: test

Stack Trace:

{“timestamp”:“2020-07-26T04:07:05.508-04”,“level”:“ERROR”,“thread”:“JobExecutor[org.camunda.bpm.engine.spring.components.jobexecutor.SpringJobExecutor]”,“logger”:“org.camunda.bpm.engine.jobexecutor”,“message”:“ENGINE-14019 Exception during job acquisition Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection”,“context”:“default”,“exception”:“org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection\n\tat org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:446)\n\tat org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:378)\n\tat org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137)\n\tat org.camunda.bpm.engine.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:44)\n\tat org.camunda.bpm.engine.impl.interceptor.ProcessApplicationContextInterceptor.execute(ProcessApplicationContextInterceptor.java:70)\n\tat org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)\n\tat org.camunda.bpm.engine.impl.jobexecutor.SequentialJobAcquisitionRunnable.acquireJobs(SequentialJobAcquisitionRunnable.java:158)\n\tat org.camunda.bpm.engine.impl.jobexecutor.SequentialJobAcquisitionRunnable.run(SequentialJobAcquisitionRunnable.java:76)\n\tat java.lang.Thread.run(Thread.java:748)\nCaused by: org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection\n\tat org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:48)\n\tat org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)\n\tat org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)\n\tat org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)\n\tat org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:109)\n\tat org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:136)\n\tat org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:254)\n\tat org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:262)\n\tat org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:236)\n\tat org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:80)\n\tat org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:183)\n\tat org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:401)\n\t… 8 common frames omitted\nCaused by: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 33084ms.\n\tat com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:676)\n\tat com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:190)\n\tat com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:155)\n\tat com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)\n\tat org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)\n\tat org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)\n\tat org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:106)\n\t… 15 common frames omitted\nCaused by: org.postgresql.util.PSQLException: This connection has been closed.\n\tat org.postgresql.jdbc.PgConnection.checkClosed(PgConnection.java:783)\n\tat org.postgresql.jdbc.PgConnection.setNetworkTimeout(PgConnection.java:1556)\n\tat com.zaxxer.hikari.pool.PoolBase.setNetworkTimeout(PoolBase.java:550)\n\tat com.zaxxer.hikari.pool.PoolBase.isConnectionAlive(PoolBase.java:165)\n\tat com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:179)\n\t… 20 common frames omitted\n”}
{“timestamp”:“2020-07-26T04:07:05.509-04”,“level”:“WARN”,“thread”:“JobExecutor[org.camunda.bpm.engine.spring.components.jobexecutor.SpringJobExecutor]”,“logger”:“com.zaxxer.hikari.pool.PoolBase”,“message”:“HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@59abf7f4 (This connection has been closed.). Possibly consider using a shorter maxLifetime value.”,“context”:“default”}

Hi @Aravind

Try this setting maxLifetime to 10 minutes. by adding to application.properties.

spring.datasource.hikari.max-lifetime=600000
spring.datasource.testWhileIdle=true
spring.datasource.test-on-borrow=true

To further check if there is any leak, please add below properties and check how goes your pool connection and if there is any leak.

spring.datasource.hikari.leakDetectionThreshold=2000
logging.level.com.zaxxer.hikari=DEBUG

Thanks for you input May i know reason behind this setting.

Folks how to add this property in BPMN Run distribution