已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。
8小时前关门了。
Improve this question
我有一个Spring启动应用程序。我检查了一对夫妇dockerfile的例子,为sprint-boot应用程序。没有人不建立jar文件在dockerfile,但它是可能的。有一个意想不到的事情,我错过了。
这是我的Dockerfile,工作正常
FROM maven:3-openjdk-18
COPY . .
RUN mvn clean package
FROM openjdk:19-alpine
VOLUME /tmp
COPY --from=0 target/*.jar app.jar
CMD ["java","-jar","/app.jar"]
1条答案
按热度按时间lqfhib0f1#
Sping Boot 可执行jar的一个优点是它包含了应用程序的所有代码及其依赖项。这为您提供了一个可以部署的单一单元。当您将应用程序打包到容器中时,它就成为了这个单一部署单元,它还包含JVM和应用程序所需的任何其他内容。假定容器是一个单一部署单元,罐 Package 可以说是不再需要了。
如Sping Boot 参考文档中所述,在构建容器时解压缩可执行文件jar可以略微缩短启动时间。您可以分解jar文件,然后使用Spring Boot的
JarLauncher
启动分解的“jar”:这种方法可以确保类路径的顺序与使用
java -jar
运行应用程序时的顺序相同。或者,您可以手动指定类路径并直接运行应用程序的main方法:
这将导致启动时间进一步小幅增加,代价是可能更改类路径的顺序。