Sunday, May 25, 2025

SpringBoot Application Startup Issue : Hikari

 Have you seen below lines are printed in the command line or log when your Springboot application is started.

Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)']

Database driver: undefined/unknown

Database version: 8.0.31

Autocommit mode: undefined/unknown

Isolation level: undefined/unknown

Minimum pool size: undefined/unknown

Maximum pool size: undefined/unknown


Solution

Solution: Fix HikariCP Configuration

1. Add Explicit JDBC URL & Driver Class

Update your application.yml (or application.properties) with complete database configuration:

yaml
Copy
Download
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
    username: your_username
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      pool-name: HikariPool-1
      minimum-idle: 5
      maximum-pool-size: 20
      idle-timeout: 30000
      max-lifetime: 2000000
      connection-timeout: 30000
      auto-commit: true
      transaction-isolation: TRANSACTION_READ_COMMITTED

2. Verify Dependencies

Ensure you have both MySQL driver and HikariCP in your pom.xml:

xml
Copy
Download
Run
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.31</version>
</dependency>
<!-- HikariCP is included automatically with Spring Boot Starter Data JPA -->

3. Check Connection Pool Status

Add this to your application to log HikariCP status at startup:

java
Copy
Download
import com.zaxxer.hikari.HikariDataSource;

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

    @Bean
    public CommandLineRunner checkDataSource(DataSource dataSource) {
        return args -> {
            if (dataSource instanceof HikariDataSource) {
                HikariDataSource hikari = (HikariDataSource) dataSource;
                System.out.println("HikariCP Config:");
                System.out.println("JDBC URL: " + hikari.getJdbcUrl());
                System.out.println("Driver: " + hikari.getDriverClassName());
                System.out.println("Max Pool Size: " + hikari.getMaximumPoolSize());
                System.out.println("Connection Timeout: " + hikari.getConnectionTimeout());
            }
        };
    }
}

4. Common Fixes for Your Issues

ProblemSolution
Undefined driverExplicitly set driver-class-name
Undefined pool sizeConfigure spring.datasource.hikari.maximum-pool-size
Undefined isolation levelSet spring.datasource.hikari.transaction-isolation
Autocommit mode undefinedConfigure spring.datasource.hikari.auto-commit

5. For PostgreSQL Configuration

If switching to PostgreSQL:

yaml
Copy
Download
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/your_db
    driver-class-name: org.postgresql.Driver
    hikari:
      maximum-pool-size: 15
      connection-timeout: 5000

6. Verify Database Connectivity

Test your connection independently using:

java
Copy
Download
try (Connection conn = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/your_db", 
    "user", 
    "password")) {
    System.out.println("Connection successful!");
    System.out.println("Autocommit: " + conn.getAutoCommit());
    System.out.println("Isolation: " + conn.getTransactionIsolation());
} catch (SQLException e) {
    e.printStackTrace();
}

7. Enable HikariCP Debug Logging

Add to application.yml:

yaml
Copy
Download
logging:
  level:
    com.zaxxer.hikari: DEBUG

This will show detailed pool initialization and connection lifecycle events.

No comments:

Post a Comment