即使在gradle build中被排除后,Spring Boot DevTools仍在docker容器中使用

因此,我们正在使用Spring boot交付我们的应用程序。我们使用Jib插件监视创建的docker映像并运行它们。 我们使用gradle构建项目,并且将开发工具标识为developmentOnly依赖项。 就像https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-devtools的spring文档中所述。

但是,当它在prod的容器中运行时,我仍然看到它不时地重新启动。 我的问题是gradle配置是否真的不能将其排除在包装之外。 我是否需要显式设置-Dspring.devtools.restart.enabled=false参数?

解决方案:

原来,这是玩游戏的gradle三角帆插件。 Spring文档上有关于如何从gradle spring boot项目中删除依赖项的信息。指定developmentOnly的技术仅有助于告诉gradle忽略开发工具。臂架gradle插件有自己的想法。

构建docker映像时,它包含所有jar,并且无法排除任何jar。唯一合理的方法是在build.gradle中自定义gradle三角帆插件以编写此代码,

 jib {
    from {
        image 'gcr.io/distroless/java:11'
    }
    container {
        jvmflags = ['-Xms1G','-Xmx1G','-Dspring.devtools.restart.enabled = false']
    }
}

这将确保即使将jar包含在容器环境中,也要注意重启。

参考:https://github.com/spring-projects/spring-boot/issues/15382

heroliyimin 回答:即使在gradle build中被排除后,Spring Boot DevTools仍在docker容器中使用

这里确实存在一些问题:

  1. Springboot有自己的自定义定义,而不是使用等同于配置文件的定义。他们的方法最适合springboot用户,但是很难与给定的所有自定义逻辑集成。
  2. Jib无法了解每个框架的所有自定义实现。

我真的认为您应该做的事情是这样的:

dependencies {
  if (System.getProperty("development") == true) {
    // include the springboot devtool dependency
  }
}

要在开发模式下运行或构建时,只需

./gradlew whateverTask -Ddevelopment=true
,

您可以通过在spring.devtools.restart.enabled=false或特定配置文件属性ex中设置application.properties来实现。 application-cloud.properties。让我知道这是否有效。

,

好吧,最近刚刚遇到了同样的问题,看来已经存在一种非常简单的解决方法。

问题

Jib实际上正在考虑将spring-boot-devtools作为运行时依赖项,因此将其添加到映像中。就我而言,对于仅在本地用于开发的h2数据库jar也是如此。 另外,如果我真的不想在生产环境中使用这些功能,那么我也不想处理构建中的任何其他自定义参数,也不能通过配置关闭功能。

解决方案

GoogleContainerTools小组发布了一个臂架扩展程序,以直接处理devtools问题。有GradleMaven版本,可以完美运行。

但是,出于我的需要(也排除了h2),我决定使用 jib层过滤器扩展,以便使我的映像尽可能靠近bootJar。

这是gradle中的代码段:

// should be at the top of build.gradle
buildscript {
    dependencies {
        classpath('com.google.cloud.tools:jib-layer-filter-extension-gradle:0.1.0')
    }
}
jib {
    // ...
    pluginExtensions {
        pluginExtension {
            implementation = 'com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension'
            configuration {
                filters {
                    filter {
                        glob = '**/h2-*.jar'
                    }
                    filter {
                        glob = '**/spring-boot-devtools-*.jar'
                    }
                }
            }
        }
    }
}

在此处查看此扩展程序的GradleMaven版本。

本文链接:https://www.f2er.com/2496127.html

大家都在问