【问题标题】:Unable to run GraalVM native image with PostgreSQL and Hibernate无法使用 PostgreSQL 和 Hibernate 运行 GraalVM 本机映像
【发布时间】:2021-09-01 17:18:58
【问题描述】:

我正在尝试使用 Spring 和 buildpacks 将我的服务构建为 GraalVM 本机映像。我的应用程序是与 PostgreSQL 数据库对话的 Spring Data REST 应用程序。代码中没有什么异常。映像构建没有问题,并且在 Docker 容器之外运行,但是当我尝试运行生成的 GraalVM 容器时,出现错误:

Description:
Native reflection configuration for org.hibernate.dialect.PostgreSQLDialect is missing.

例外是

Caused by: java.lang.ClassNotFoundException: org.hibernate.dialect.PostgreSQLDialect
    at com.oracle.svm.core.hub.ClassForNameSupport.forName(ClassForNameSupport.java:71) ~[na:na]
    at java.lang.Class.forName(DynamicHub.java:1319) ~[.....:na]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:130) ~[na:na]

我的应用程序.yml:

---
spring:
  config:
    activate:
      on_profile: local
  datasource:
    url: jdbc:postgresql://localhost:5432/test
    username: postgres
    password: 1234
    driver-class-name: org.postgresql.Driver
  jpa:
    hibernate:
      use-new-id-generator-mappings: false
      ddl-auto: none
    show-sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
      javax:
        persistence:
          validation:
            mode: none

我知道 Spring 原生图像支持仍然存在问题,我只是想知道问题是否在我这边。

【问题讨论】:

    标签: postgresql spring-boot graalvm-native-image


    【解决方案1】:

    现在有一种方法可以使用当前版本的 Spring Native 使用版本 Spring Native 提示来解决 postgres 的这个问题。

    Native Hints

    事实证明,使用注解很容易实现。请参阅下面的示例...

    package com.margic.serverless.data;
    
    import org.hibernate.dialect.PostgreSQL95Dialect;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.nativex.hint.TypeHint;
    
    @SpringBootApplication
    @TypeHint(types = PostgreSQL95Dialect.class, typeNames = "org.hibernate.dialect.PostgreSQLDialect")
    public class DataApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DataApplication.class, args);
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      原因是 Spring 原生支持问题:以下依赖项未知可与 Spring Native 一起使用:...、Rest Repositories、...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多