所以我们使用 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 jib 插件。虽然 spring 文档是关于如何从 gradle spring boot 项目中删除依赖关系的。指定 a developmentOnly
only 的技术有助于告诉 gradle 忽略开发工具。jib gradle 插件有自己的想法。
它在构建 docker 映像时包含所有 jar,并且无法排除任何 jar。唯一合理的方法是在build.gradle中自定义gradle jib插件来写这个,
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