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)
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:
@OverridepublicIdentifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {Identifierresult = name;//replace table name postfix if not running with customer db userIdentifiercurrentSchemaIdentifier = 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)