运行spring boot原生应用程序,无法加载资源文件

Dor*_*rin 6 spring spring-boot graalvm graalvm-native-image

我正在尝试将 Spring Boot 应用程序编译为本机应用程序并使用 docker 运行它。我正在使用 spring-graalvm-native 版本 0.8.5 和 Spring Boot 版本 2.4.1。我正在尝试使用 spring-boot-maven-plugin 使用以下命令构建 docker 容器:

mvn spring-boot:build-image
Run Code Online (Sandbox Code Playgroud)

在代码中,我想从资源中读取文件,并尝试像这样加载它:

@Value("classpath:my.json")
Resource resourceFile;
Run Code Online (Sandbox Code Playgroud)

编译步骤工作正常,但问题是当我运行 docker 映像时 my.json 文件未加载,无法找到它。

我运行native-image-agent并生成 META-INF 文件夹,其中 resources-config.json 文件添加了 my.json 模式。

我还尝试配置 spring-boot-maven-plugin 并添加:

-H:IncludeResources='.*/my.json$'
Run Code Online (Sandbox Code Playgroud)

但是这些配置都不起作用,你能帮我找出问题所在吗?

此致

项目结构:

在此输入图像描述

Col*_*oli 1

RuntimeHintsRegistrar我可以使用GraalVM Native Image Support doc使其工作。

创建一个实现RuntimeHintsRegistrar

public class HintsRegistrar implements RuntimeHintsRegistrar {
    @Override
    public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
        hints.resources().registerPattern("my.json");
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其用于您的DemoApplication.java

@SpringBootApplication
@ImportRuntimeHints(HintsRegistrar.class)
public class DemoAppplication {
Run Code Online (Sandbox Code Playgroud)