如何将 PGProperty 与 HikariDataSource 一起使用?

问题描述

我想弄清楚如何使用 PGProperty 属性来配置 hikari 数据源。

这很好用:

final String jdbcUrl = String.format(
            "jdbc:postgresql://%s:%s/%s?ApplicationName=%s",configuration.getDatabaseHost(),configuration.getDatabasePort(),configuration.getDatabaseName(),configuration.getDatabaseAppName());
hikariDataSource.setJdbcUrl(jdbcUrl);
hikariDataSource.setUsername(configuration.getDatabaseUsername());
hikariDataSource.setPassword(configuration.getDatabasePassword());
hikariDataSource.setMaximumPoolSize(configuration.getDatabaseMaximumPoolSize());

但我希望能够使用 PGProperty 来避免像上面那样手动构建 JDBC url。当我尝试这个时:

hikariDataSource.setDataSourceClassName("org.postgresql.ds.PGSimpleDataSource");
hikariDataSource.addDataSourceProperty(PGProperty.PG_HOST.getName(),configuration.getDatabaseHost());
hikariDataSource.addDataSourceProperty(PGProperty.PG_PORT.getName(),configuration.getDatabasePort());
hikariDataSource.addDataSourceProperty(PGProperty.PG_dbnAME.getName(),configuration.getDatabaseName());
hikariDataSource.addDataSourceProperty(PGProperty.APPLICATION_NAME.getName(),configuration.getDatabaseAppName());
hikariDataSource.addDataSourceProperty(PGProperty.USER.getName(),configuration.getDatabaseUsername());
hikariDataSource.addDataSourceProperty(PGProperty.PASSWORD.getName(),configuration.getDatabasePassword());

我收到此错误

Property PGHOST does not exist on target class org.postgresql.ds.PGSimpleDataSource

https://jdbc.postgresql.org/documentation/publicapi/org/postgresql/PGProperty.html

解决方法

    hikariDataSource.setJdbcUrl("jdbc:postgresql:");
    hikariDataSource.addDataSourceProperty(PGProperty.PG_HOST.getName(),configuration.getDatabaseHost());
    hikariDataSource.addDataSourceProperty(PGProperty.PG_PORT.getName(),configuration.getDatabasePort());
    hikariDataSource.addDataSourceProperty(PGProperty.PG_DBNAME.getName(),configuration.getDatabaseName());
    hikariDataSource.addDataSourceProperty(PGProperty.APPLICATION_NAME.getName(),configuration.getDatabaseAppName());
    hikariDataSource.addDataSourceProperty(PGProperty.USER.getName(),configuration.getDatabaseUsername());
    hikariDataSource.addDataSourceProperty(PGProperty.PASSWORD.getName(),configuration.getDatabasePassword());
    hikariDataSource.setMaximumPoolSize(configuration.getDatabaseMaximumPoolSize());