【发布时间】:2021-11-19 19:30:09
【问题描述】:
我已经针对https://quarkus.io/guides/deploying-to-google-cloud 设置了我的quarkus 应用程序 创建了一个 Cloud SQL 实例。 并愉快地将 java11 应用程序第一次部署到 GAE。 :-)
但是 - 在启动时 quarkus 失败,原因如下:
Caused by: java.lang.ClassNotFoundException: org.hibernate.dialect.PostgreSQL10Dialect
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at io.quarkus.hibernate.orm.runtime.service.FlatClassLoaderService.classForName(FlatClassLoaderService.java:36)
看着罐子:
$ jar tvf foodie-1.0-SNAPSHOT-runner.jar | fgrep PostgreSQL10Dialect
1184 Tue Sep 28 20:12:07 CEST 2021 io/quarkus/hibernate/orm/runtime/dialect/QuarkusPostgreSQL10Dialect.class
990 Tue Sep 28 20:12:08 CEST 2021 org/hibernate/dialect/PostgreSQL10Dialect.class
任何提示如何进行?
application.properties:
quarkus.package.type=uber-jar
quarkus.datasource.db-kind=other
%dev.quarkus.datasource.jdbc.url=jdbc:postgresql:///quarkus
quarkus.datasource.jdbc.url=jdbc:postgresql:///quarkus
quarkus.datasource.jdbc.driver=org.postgresql.Driver
quarkus.datasource.jdbc.additional-jdbc-properties.cloudSqlInstance=addlogic-foodiefnf-1:europe-west3:quarkus
quarkus.datasource.jdbc.additional-jdbc-properties.socketFactory=com.google.cloud.sql.postgres.SocketFactory
quarkus.hibernate-orm.dialect=org.hibernate.dialect.PostgreSQL10Dialect
从 pom.xml 中提取:
<maven.compiler.target>11</maven.compiler.target>
<quarkus-plugin.version>2.2.3.Final</quarkus-plugin.version>
<quarkus.platform.artifact-id>quarkus-universe-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
<quarkus.platform.version>2.2.3.Final</quarkus.platform.version>
<postgres-socket-factory.version>1.3.3</postgres-socket-factory.version>
[...]
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm-panache</artifactId>
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>postgres-socket-factory</artifactId>
<version>${postgres-socket-factory.version}</version>
</dependency>
MCVE 复制器项目可以在以下位置找到
git@gitlab.com:addlogic/code-with-quarkus.git#
mysql 的替代方案正在运行
我尝试了 mysql 的替代方案,它在同一个 MCVE 和我设置的另一个测试项目中运行。
pom.xml
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-mysql</artifactId>
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<artifactId>mysql-socket-factory-connector-j-8</artifactId>
<version>1.3.3</version>
</dependency>
application.properties
# https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory/blob/main/docs/jdbc-mysql.md
quarkus.datasource.db-kind=other
quarkus.datasource.jdbc.url=jdbc:mysql:///quarkus
quarkus.datasource.jdbc.driver=com.mysql.cj.jdbc.Driver
quarkus.datasource.username=root
quarkus.datasource.password=quarkus
quarkus.datasource.jdbc.additional-jdbc-properties.cloudSqlInstance=addlogic-foodiefnf-1:europe-west3:quarkusmysql
quarkus.datasource.jdbc.additional-jdbc-properties.socketFactory=com.google.cloud.sql.mysql.SocketFactory
quarkus.hibernate-orm.dialect=org.hibernate.dialect.MySQL8Dialect
所以这让我更加好奇为什么它不能与 PostgreSQL 一起使用。
【问题讨论】:
-
您好,您是在创建一个已解决的 uber-jar 吗?如果是这种情况,您可以检查该类是否存在于依赖项中,它应该在 hibernate-core jar 中跨度>
-
你能在 Quarkus 存储库上用一个复制器项目打开一个问题吗?查看您的示例,它应该可以工作。
-
@JavierToja 我检查了一下,uber-jar 中的类出现了两次。查看已编辑的段落。
-
@Andreas 该类仅存在一个,因为 quarkus 不同,如果我没记错的话,类是由它们的 fqpn 加载的
-
@loicmathieu 我在 'git@gitlab.com:addlogic/code-with-quarkus.git#' 创建了一个 MCVE 复制器项目,我对这个过程有点陌生 - 我在哪里可以找到并打开Quarkus 存储库有问题?
标签: google-app-engine google-cloud-platform google-cloud-sql quarkus quarkus-panache