我正在尝试使用Spring和buildpacks构建我的服务作为GraalVM本机映像。我的应用程序是Spring Data REST应用程序与PostgreSQL数据库对话。代码中没有任何异常。图像构建没有问题,并在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]
我application.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原生图像支持仍然有问题,我只是想知道问题是否在我这边。
现在有一种方法可以解决当前Spring Native版本的postgres,使用Spring Native版本提示。
本地提示
事实证明,使用注释实现这一点很简单。
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);
}
}
原因是Spring本机支持问题:以下依赖项不知道与Spring本机一起工作:…,Rest Repositories…