Skip to content

Ensuring at least one connection is initialized before dependent framework bootstrap (Hibernate) #2397

Description

@janjicandjelka8

Is there a recommended way in HikariCP to block application startup until at least one connection is successfully established?

Context:

Our custom Hibernate PhysicalNamingStrategy depends on JDBC metadata:
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
Identifier result = name;
// replace table name postfix if not running with customer db user
Identifier currentSchemaIdentifier = context.getCurrentSchema();
...

During startup, Hibernate sometimes runs before a connection is available, so context.getCurrentSchema() falls back to the hibernate.default_schema, which is not the same as the currentSchema from an established JDBC connection (expected value is DB_CUSTOMER, which is in 99% cases correctly taken).

This is happening occasionally. Usually, restarting the Spring Boot app resolves the issue, and we assume it is a race condition between Hikari and Hibernate.

Would setting initializationFailTimeout, or any other configuration, guarantee that a connection is ready before consumers (like Hibernate) access it?

Hikari properties:

prefix: "spring.datasource.hikari",
properties: {
validationTimeout: 5000,
hikariPoolMXBean: { },
minimumIdle: 10,
password: "******",
metricsTrackerFactory: { },
dataSourceProperties: { },
loginTimeout: 30,
autoCommit: true,
connectionTimeout: 30000,
poolName: "DB_NAME",
initializationFailTimeout: 1,
readOnly: false,
registerMbeans: false,
healthCheckProperties: { },
isolateInternalQueries: false,
leakDetectionThreshold: 0,
maxLifetime: 1800000,
keepaliveTime: 120000,
allowPoolSuspension: false,
idleTimeout: 600000,
driverClassName: "oracle.jdbc.OracleDriver",
jdbcUrl: "jdbc:oracle:thin:@LDAP://ldap01.abc.net:389/DB_NAME,cn=OracleContext,...",
maximumPoolSize: 10,
username: "DB_CUSTOMER"

Hibernate default schema property:
spring.jpa.properties.hibernate.default_schema: "DEFAULT_SCHEMA" (this must stay as is)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions