【问题标题】:Why is class PostgreSQL10Dialect not found on Quarkus in Google App Engine java11? [closed]为什么在 Google App Engine java11 的 Quarkus 上找不到类 PostgreSQL10Dialect? [关闭]
【发布时间】: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


【解决方案1】:

查看复制器,问题在于 Hibernate 方言配置值有一个尾随空格:org.hibernate.dialect.PostgreSQL10Dialect 而不是 org.hibernate.dialect.PostgreSQL10Dialect

删除尾随空格将解决问题。

【讨论】:

  • 我删除了尾随空格,现在它可以与 postgres 一起使用!非常感谢您的帮助!!!太好了,由于在 github.com/quarkusio/quarkus/issues/20492 中提交,现在变得更加健壮
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 2010-12-28
  • 2020-08-13
  • 2017-10-12
  • 2015-02-23
相关资源
最近更新 更多