Quarkus:数据源“<default>”:致命:主机没有 pg_hba.conf 条目

Quarkus: Datasource '<default>': FATAL: no pg_hba.conf entry for host

我用 PostgreSQL DB 编写了一个 Quarkus JPA/Hibernate 应用程序,完美地与 JVM 一起工作 - 运行 'quarkusDev' gradle 任务。

当我用

编译本机应用程序时
#!/usr/bin/env bash
export QUARKUS_PROFILE=****
export PG_USERNAME=*****
export PG_PASSWORD=*****
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
./gradlew build -Dquarkus.package.type=native

编译正常,但是当我 运行 我得到原生图像时:

14:41:23 WARN  [io.ag.pool] Datasource '<default>': FATAL: no pg_hba.conf entry for host "***.***.***.***", user "xxxxxxxxxxxxxx", database "*****", SSL on
14:41:23 WARN  [or.hi.en.jd.sp.SqlExceptionHelper] SQL Error: 0, SQLState: 28000
14:41:23 ERROR [or.hi.en.jd.sp.SqlExceptionHelper] FATAL: no pg_hba.conf entry for host "***.***.***.***", user "xxxxxxxxxxxxxx", database "*****", SSL on
14:41:23 ERROR [io.qu.application] Failed to start application: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory

我尝试添加一个 pg_hba.conf 文件:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             0.0.0.0/0               md5

并把它放到

/src/main/resources

and/or 到本机图像目录,但没有运气。

此外,我为我的原生图像配置了资源,将 'resources-config.json' 添加到“/src/main/resources”:

{
  "resources": [
    {
      "pattern": ".*\.yaml$"
    },
    {
      "pattern": ".*\.conf$"
    },
    {
      "pattern": ".*\.txt$"
    },
    {
      "pattern": ".*\.html$"
    }
  ]
}

我将以下行添加到 'application.yml'

quarkus:
  native:
    additional-build-args: -H:ResourceConfigurationFiles=resources-config.json

但是即使这样做,也找不到pga_hba.conf,当运行时,原生图像一直在抱怨。

问题出在 Postgres 服务器使用的 pg_hba.conf 上。您需要找到它并添加一个与您发送到服务器的连接参数相匹配的条目。

原来是我没给可执行文件传递环境变量。

当然 - 在意识到问题所在后显而易见! - 您不仅需要在编译本机映像时传递 DB 环境变量 - 因此测试可以 运行 - 而且您还需要在启动它时传递它们。

所以,像这样的脚本解决了这个问题:

#!/usr/bin/env bash
export PG_USERNAME=*****
export PG_PASSWORD=*****
./build/my-native-image.runner