springboot项目打包成war用tomcat运行好还是打包成jar直接启动好

时间:2022-09-01 10:13:24 类型:JAVA
字号:    

  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依懒排除掉。

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

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

  可执行jar文件方式部署是我们推荐的,特别是在微服务场景下部署更便捷

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

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

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

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

  综上,如果服务器配置高、节点多、微服务方式,建议选择jar方式部署;如果服务器配置跟不上,建议选择war方式部署(省内存空间)


  从事Java服务端研发工作的同学相信都用过springboot框架来开发项目,做过多个项目的同学一定也经历过war包或jar包的部署方式,甚至同一个团队有时候不同的项目也会采取不同的方式。

  那么到底是用war包部署还是用jar包部署呢?个人经验认为,从性能方面考虑两者都可以做到高并发、高性能。而具体应该采用哪种方式应该看具体的研发团队规模以及项目研发流程。

  war包部署方式

  我们将项目打成war包部署到服务器上的tomcat的webapps目录下,tomcat启动时候都会解压这个war包并创建一个同名文件夹,文件夹目录如下:

  其中META-INF文件是war包的描述文件,忽略即可。

  主要是WEB-INF文件夹,里面有class和lib两个文件夹:

  class文件基本上会包含我们项目里的class、properties、xml等文件;

  lib则是我们依赖的第三方jar包

  我们在本地使用maven构建的时候也会在target目录下形成这样一系列的文件或文件夹:

  jar包部署方式


  SpringBoot项目可以打成jar包部署,也可以打成war包部署,它们俩本质上都是使用Tomcat来部署应用,但是使用上会有不同:

  jar包方式,打jar包的时候其实还是把Tomcat内嵌到jar包中了,将应用代码和部署应用服务器集成到一个jar包中,通过设置启动类(一般是SpringBoot的应用启动类)来实现jar包的运行,这种方式对于运维操作来说方便、快捷,因为操作就是一个jar包,但是它的缺点就是无法在jar包外部配置Tomcat的相关配置参数,如果需要修改只能修改SpringBoot内部规定的配置文件,还有就是使用jsp或其它模板语言上会很麻烦,因为有些不兼容或配置麻烦,所以,如果你的应用不涉及前端页面展示,前后端分离的模式,推荐jar包方式。

  war包方式,这种方式大家都很熟悉了,将编译后的class文件和应用资源按照war的规则打包,war包直接放到Tomcat服务器设置的war包目录下,启动Tomcat就会解压war包、加载应用资源、部署应用,这种方式成熟、普遍,但是运维相对来说管的事多一些,例如Tomcat服务器的配置、Tomcat资源的管理、war包发布到Tomcat等,不过在出现问题时,这种方式可以按照之前的逻辑去发现问题、解决问题,如果是jar包方式,就只能研发自己去解决了,还有如果你的项目有前端展示层的代码,前后端不是分离的,例如使用jsp或展示层模板语言,推荐使用war包方式。


  两种方式都可以,看你们的项目与决策吧。

  jar包:直接通过内置tomcat运行,不需要额外安装tomcat。如需修改内置tomcat的配置,只需要在spring boot的配置文件中配置。内置tomcat没有自己的日志输出,全靠jar包应用输出日志。但是比较方便,快速,比较简单。

  war包:传统的应用交付方式,需要安装tomcat,然后放到waeapps目录下运行war包,可以灵活选择tomcat版本,可以直接修改tomcat的配置,有自己的tomcat日志输出,可以灵活配置安全策略。相对打成jar包来说没那么快速方便。


<