Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Springboot HikariCP

I using springboot with HikariCP, but after a while my app crash and I got the error:

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
...

Caused by: org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection

....
Caused by: java.sql.SQLTransientConnectionException: HikariPool-6 - Connection is not available, request timed out after 30000ms.

This is my aplication.properties

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:postgresql://localhost:5432/db_dnaso
#spring.datasource.url=jdbc:postgresql://172.16.1.10:5432/db_dnaso
spring.datasource.username=postgres
spring.datasource.password=dna44100
spring.datasource.driver-class-name=org.postgresql.Driver

So I have a lot of save, find and anothers access to DB, how can I visualize how method are blocking my connection?

tks

like image 277
Fabio Ebner Avatar asked Jun 26 '17 19:06

Fabio Ebner


People also ask

What is HikariCP Spring Boot?

HikariCP is a fast, simple, production ready JDBC connection pool. In this article we will learn how to configure it in Spring Boot applications. Then, we will cover how to monitor Hikari Connection Pool properties using Spring Boot actuator.

What is HikariCP?

"HikariCP is solid high-performance JDBC connection pool. A connection pool is a cache of database connections maintained so that the connections can be reused when future requests to the database are required.

Why is HikariCP faster?

Since fewer bytes are generated than the JDK Proxy, negating a lot of unnecessary byte-code, thus making it faster in execution ) Optimizations of Proxy and Interceptor: Hikari library has reduce a lot of code, e.g HikariCP's Statement proxy has only 100 lines of code.

What is maximum pool size Hikari?

spring.datasource.hikari.maximum-pool-size=50. Specifies number of database connections between database and application. This property controls the maximum size that the pool is allowed to reach, including both idle and in-use connections. spring.datasource.hikari.connection-timeout=60000.


3 Answers

It looks like your your database server is running out of connection. Default value for property maximumPoolSize in Hikari is 10. That means it will try to create 10 connection on server startup and it will not start if not able to acquire 10 connection or may fail if your db server pool size having less connection in the pool as you are creating using Hikari configuration. If you are able to start Spring Boot server and then facing this issue then try enabling leakDetectionThreshold and check which connection is taking more time and not returning to Hikari pool .

spring:
  datasource:        
    hikari:                    
      leak-detection-threshold: 2000
like image 156
Smit K Avatar answered Oct 07 '22 20:10

Smit K


Enable the leakDetectionThreshold, set to something like 1 minute (60000ms). It is likely that you have a connection leak somewhere ... a connection is borrowed but never closed (returned).

like image 28
brettw Avatar answered Oct 07 '22 22:10

brettw


In springboot, you can set spring.datasource.hikari.leak-detection-threshold=10000 (in milliseconds) in application.properties.

And the default value for maximumPoolSize is 10. You can change it with spring.datasource.hikari.maximum-pool-size=xx.

like image 38
Nick.Guo Avatar answered Oct 07 '22 20:10

Nick.Guo