我正在try 将健康判断添加到我的Spring Boot应用程序中,同时使用Spring Boot Build Image with Health Check中建议的BuildPack.

我的pom.xml配置:

<plugin>
    <groupId>org.graalvm.buildtools</groupId>
    <artifactId>native-maven-plugin</artifactId>
</plugin>
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <image>
            <builder>dashaun/builder:tiny</builder>
            <name>${docker-image-name}</name>
            <env>
                <BP_HEALTH_CHECKER_ENABLED>true</BP_HEALTH_CHECKER_ENABLED>
            </env>
            <buildpacks>
                <buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack>
                <buildpack>gcr.io/paketo-buildpacks/health-checker:latest</buildpack>
            </buildpacks>
        </image>
    </configuration>
</plugin>

和我的docker-compose.yml配置:

  catalog-service:
    image: sivaprasadreddy/catalog-service
    container_name: catalog-service
    environment:
      - THC_PATH=/actuator/health
      - THC_PORT=8081
    ports:
      - "8081:8081"
    healthcheck:
      test: [ "CMD", "/cnb/process/health-check" ]
      start_period: 30s
      interval: 5s
      retries: 10

现在,当我使用JVM Build(mvn spring-boot:build-image)构建停靠器映像并使用带有上述运行状况判断的docker-compose运行容器时,它工作得很好.

Problem: 问题是,当我try 使用mvn -Pnative spring-boot:build-image构建GraalVMNative时,它不是在构建本机映像,而是在构建一个常规的基于JVM的映像.

当我删除<buildpacks>...</buildpacks>配置时,它正在正确地构建本机映像.

我是否应该包括任何额外的构建包来支持构建本机映像,或者我是否配置错误了?

推荐答案

当您想要构建本机映像应用程序时,需要运行一组不同的构建包.因为您包括一个<buildpacks>块,所以您明确表示"使用这组构建包".这覆盖了默认 Select ,默认 Select 通常会处理自动 Select 正确的构建包集(即标准JVM或GraalVM).

如果你想构建一个原生图像应用程序,你需要把<buildpacks>块换掉,就像这样.

            <buildpacks>
                <buildpack>urn:cnb:builder:paketo-buildpacks/java-native-image</buildpack>
                <buildpack>gcr.io/paketo-buildpacks/health-checker:latest</buildpack>
            </buildpacks>

然后确保在启用native配置文件的情况下运行./mvnw spring-boot:build-image -Pnative.这也是必须的.

请参见the instructions in this sample for an example.

Java相关问答推荐

如何让HikariCP指标在NewRelic中正确显示?

同时运行JUnit测试和Selenium/Cucumber测试时出现问题

如何在返回bigint []值的子查询中使用any?

为什么BasicComboBoxRenderer在文本不存在或文本为空的情况下设置两次文本?

为什么我的ArrayList索引的索引总是返回-1?

Java FX中的河内之塔游戏-在游戏完全解决之前什么都不会显示

关于泛型的覆盖规则

在Java 17中使用两个十进制数字分析时间时出错,但在Java 8中成功

Domino Designer 14中的保存代理添加了重影库

如果按钮符合某些期望,如何修改它的文本?

Android Java:已设置但未读取SharedPreferences

为什么这种递归会有这样的行为?

如何在Record Java中使用isRecord()和RecordComponent[]?

如何使用jooq更新记录?

接受类及其接口的Java类型(矛盾)

无法在Java中获取ElastiCache的AWS CloudWatch指标

我无法在我的Spring Boot应用程序中导入CSV依赖项

spring 数据Elastic search 与 spring 启动数据Elastic search 之间的区别是什么?

如何从指定某些字段的父对象创建子对象

语句打印在错误的行(Java Token 问题)