Springboot生产环境部署打成jar包好还是war包好?

Java Web 潘老师 1年前 (2023-04-07) 1825 ℃ (0) 扫码查看

很多朋友不知道Springboot项目在生产环境部署打成jar包好还是war包好,Spring Boot是用来简化Spring应用的配置和开发过程的,此框架采用了“约定优于配置”的理念,免去了繁琐的XML配置,使我们开发项目更简单。而且Spring Boot提供了两种项目打包方式:生成war文件、生成可执行的jar文件,很多Java开发者不清楚这两种项目打包方式的区别,生产环境该选哪种方式呢?

Spring Boot项目部署方式的区别

1、war包方式部署

war包其实是打包后的Java Web工程,本质上是个压缩包,里面包含了很多目录及文件,我们把war包放入Tomcat这类容器中启动后,war包就会自动解压出一个同名的文件夹来。

注意:Spring Boot项目如果要打包成war包来部署,是需要修改项目入口文件代码的。另外由于Spring Boot内置了Tomcat容器,所以打包成war包时要将内置的Tomcat依懒排除掉。

要把代码打成 war 包要分成以下几个步骤:

1. 修改 pom.xml 文件中的配置,将打包方式 <packaging> 设置成 war;

2. 排除内置的 Tomcat 容器,也就是不要把 Tomcat 包进来了;

3. 修改入口方法,让启动类继承 SpringBootServletInitializer,并且覆盖 configure 方法;或者单独创建个类继承这个类也行。

如果采用了 war 包部署,项目中配置文件中的一些配置将失效,比如 port、servlet.context-path 等;打完的包我们可以部署在 Tomcat 或其他的 web 容器中。

2、可执行jar文件方式部署

Spring Boot框架默认的打包部署方式是生成一个可执行的jar文件,无论项目多么复杂,依懒包有多少,www.panziye.com最终只有一个jar文件(有些可能有外置的配置文件),在任何一台装有JRE/JDK环境的服务器上可以直接以 java -jar xx.jar 这种方式来运行(其实是靠内置的Tomcat来运行的),十分方便。

Spring Boot 默认的打包方式就是 jar,因为“约定优于配置”的原则,所以我们什么也不配置,打出来的包就是 jar 格式的,当然我们也可以在 pom.xml 中加上一行配置(我一般用 maven)。

 <packaging>jar</packaging>

在 <build> 内配置打包的名称,就完成了打包的配置:

最后执行打包命令即可:mvn clean package

打包完成后,在项目的 target 目录下会生成一个 jar 包,也就是我们打包好的项目代码了;Spring Boot 打成的 jar 包和普通的 jar 包还是有一定区别的,关键就在于Spring Boot 打成的 jar 包包含了自己所依赖的其他 jar 包,并且内置了容器,默认把 Tomcat 也打进了 jar 包(也可以换成 jetty、undertow),我们可以直接运行这个 jar 包。

生产环境如何选择布署方式?

无论是war方式还是jar方式,本质上差别并不大。在生产环境下还是要选择合适的方式。

1)war包是放在Servlet容器中(如:Tomcat)运行的,所以像上下文路径、端口号等是war包无法决定的;

2)jar包由于内嵌了Tomcat容器,所以端口号、上下文路径可由jar包自己决定,虽然方便但是jar方式打包后的文件较war包的要大得多。

总结

综上,如果服务器配置高、节点多、微服务方式,建议选择jar方式部署;如果服务器配置跟不上,建议选择war方式部署(省内存空间)。最后,我们认为可执行jar文件方式部署是我们推荐的,特别是在微服务场景下部署更便捷。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/6113.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】