我用PostgreSQL编写了一个QUUKUS JPA/Hibernate应用程序DB完美地与JVM一起工作-由“QUUKUSDev”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
和/或到本机映像目录,但运气不好。
此外,我为我的本机映像配置了资源,将“resource-config. json”添加到“/src/main/资源”:
{
"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