brettwooldridge / HikariCP

光 HikariCP・A solid, high-performance, JDBC connection pool at last.
Apache License 2.0
19.63k stars 2.9k forks source link

Support environment variables in properties file #2181

Open NathanEckert opened 4 months ago

NathanEckert commented 4 months ago

Hello,

Playing around with the configuration files of Hikari, I noticed it does not support environment variable:

package com.tests.hikari

import static org.assertj.core.api.Assertions.assertThat;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Cleanup;
import org.junit.jupiter.api.Test;

public class TestHikariExample {

  @Test
  void testHikariConfigFileWithEnvVar() {
    System.setProperty("hikaricp.configurationFile", "src/test/resources/hikari.properties");

    var config = new HikariConfig();

    @Cleanup
    var dataSource = new HikariDataSource(config);

    assertThat(dataSource.getConnectionTimeout()).isEqualTo(250);
    assertThat(config.getConnectionTimeout()).isEqualTo(250);

  }
}

Associated hikari.properties file:

jdbcUrl=jdbc:redshift://my-cluster.redshift.amazonaws.com:port/databaseName
datasource.user=${REDSHIFT_USERNAME}
datasource.password=${REDSHIFT_PASSWORD}
connectionTimeout=250

This works if I use the plain values instead of the env variables

N-B: I might even want to use them in a more convulated way, for example: jdbcUrl=jdbc:redshift://${REDSHIFT_CLUSTER_NAME}.redshift.amazonaws.com:${REDSHIFT_PORT}/${REDSHIFT_DATABASE_NAME}