springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

Spring Boot 为我们提供了两种打包的方式:jar 和 war,开发人员可以很方便地修改两种打包方式,那么打包成哪种方式启动比较好呢?

Jar

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

jar

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

springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

最后执行打包命令即可:

mvn clean package

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

War

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

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

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

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

springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

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

Jar or War

首先表明,我是倾向于使用 jar 包部署的,我们项目也是这么做的。至于选择哪种部署方式,可以考虑这几点:

  • war 包不排除 Tomcat 容器直接打包,我们甚至可以通过 java -jar xxx.war 的方式启动,这种情况先不做考虑;打包成 jar 还是 war,主要讨论的是使用内置容器还是外置容器的问题;

  • 如果项目中有使用 JSP,那么使用 war 包部署会更方便一些,虽然我们也可以通过配置集成 JSP 通过 jar 包方式运行;新项目的话就不要用 JSP 了;

  • 如果公司用的 web 容器不是 Tomcat、Jetty 或 undertow,那就只能打成 war 包部署;

  • 如果公司一直使用 Tomcat 部署,对于 Tomcat 本身的优化有一定的能力,有完善的脚本、工具什么的,可以考虑使用 war 包部署;

  • 我比较倾向于 jar 包部署,使用 Spring Boot 的内置容器,还是因为这样做,可以屏蔽(部分)运行环境的差异,开发人员开发出来的代码,打包好部署在测试、生产环境,我们并不需要单位每个环境之间 Tomcat 的配置可能有所不同,导致我们的程序无法正常运行,这可以让我们的交付能力变强。

springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

所以有可能的话,可以尝试使用 docker,上面说到的屏蔽(部分)运行环境的差异,就变成了屏蔽(绝大部分)运行环境的差异了。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

怎么把war包部署到tomcat?

首先感请

war部署tomcat虽然简单。但是错误部署会导致性能损耗。

War包一般是在进行Web开发时,通常是一个网站Project下的所有源码的集合,里面包含前台HTML/CSS/JS的代码,也包含Java的代码。

当开发人员在自己的开发机器上调试所有代码并通过后,为了交给测试人员测试和未来进行产品发布,都需要将开发人员的源码打包成War进行发布。

War包可以放在Tomcat下的webapps或者word目录下,随着tomcat服务器的启动,它可以自动被解压。

可以使用http://localhost:8080/sample 检查是否启动成功。

如果无法正常打开,请检查日志文件(例如tomcat / logs / catalina.out)是否存在部署问题。

但是官方文档注明

springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

将Web应用程序部署为WAR文件并将Tomcat配置为不解压缩WAR将导致启动时间显着减慢和运行时性能降低。启动时间测量速度慢了三到十倍。运行时影响将在很大程度上取决于应用程序结构。所以正确部署还是很有必要的。

本人大厂程序员,专注互联网技术。可以关注我哈

如何实现tomcat自动化部署?

作为公司运维人员,每天tomcat正式环境和测试环境部署上线浪费了大量时间,每次无非就是备份替换重启,有时候开发一个小问题都会导致自己加班2到3个小时,等他们解决问题上线后才能下班,所以想问的是怎么样可以实现tomcat的自动化部署?比如做一个web页面,每一个更新都要求开发说明,然后上传更新文件,后台根据文件名查询自动备份替换,然后开发选择是否进行重启,整个过程都有日志记录。请问,怎么可以实现?谢谢。 springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

像BAT这样的大公司,都是有一套自动化流水线的,出于公司安全红线要求,我无法讲的太细,但是我可以提供些思路给题主参考。

工具

工欲善其事,必先利其器,我们先来说需要哪些工具

1 git,用于保存最新要上线的代码

2 maven,用于打包项目

3 Jenkins,用于触发任务

4 sh脚本或者Python脚本,执行Jenkins任务的脚本

流程

接下来是实际的流程。

springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

首先,由开发人员把要上线的代码上传到指定代码库。

然后,开发人员触发Jenkins任务。

这个Jenkins的任务是自动化部署的核心,包含以下步骤

1 开始对代码进行打包

2 把包放到服务器指定文件夹下

插一句,为了安全起见,我们建议的是进行热部署,何为热部署?

热部署需要Nginx+多台Tomcat的配合。

假设目前只有一台Tomcat连接到了Nginx上,那么可以把要更新的代码部署在另一台Tomcat上,然后启动新的Tomcat,确认该服务启动成功,各能力已经启动后,再去修改Nginx的conf文件,把原本给旧Tomcat的请求切到新Tomcat上,这样就实现了热部署。如果不使用这种办法,而是直接在旧的Tomcat上部署新的war包的话,重启Tomcat的过程,就会有几秒停服,这对用户来说是不可接受的。既然说到这里,再介绍两个热部署用到的Nginx的命令。在修改Nginx的conf文件后,要在Nginx的根目录下执行sbin/nginx -t 来检查当前conf文件配置是否正确,如果是“successful”的,就可以执行sbin/nginx -s reload来进行实现把新的流量切到新的机器上,即使新的conf文件生效。

springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

好的,关于热部署的部分说完了,我们再说回来。

3 将旧的服务器根目录下的war包用cp命令放到一个专门备份的文件夹下

4 将新的war包同样用cp命令放到即将启动的Tomcat根目录下的webapps文件夹下,然后解压

5 执行sh bin/

start.sh

启动新的Tomcat

6 检查该Tomcat是否启动成功,包括进程存在,tail -f

catalina.out

日志一直在打,api能够调通

7 修改Nginx的conf文件

8 检查Nginx配置文件是否successful

9 更新Nginx配置,即sbin/nginx -s reload

10 继续观察新Tomcat是否运行正常,如果不正常则立刻切回原Tomcat,本次自动更新失败

springboot打成war包部署到tomcat,springboot项目打包成war用tomcat运行好还是打包成jar直接启动好?为何?

11 如果正常,则停止旧的Tomcat。

以上,自动化部署完成。

我是苏苏思量,来自BAT的Java开发工程师,每天分享科技类见闻,欢迎关注我,与我共同进步。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论