本文转载自微信公众号《神奇的程序员K》,作者:神奇的程序员K,转载请联系神奇的程序员K公众号。前言在部署我的开源项目的后端代码时,我一直使用的是jar包格式。一开始觉得没什么问题,很方便。这些天,后端代码经常更改。打包成jar包后,每次更新都需要到服务器停止旧的服务,太麻烦了。直接使用外部tomcat即可。打包成war包更方便。本文将与大家分享我的实现过程。欢迎有兴趣的开发者阅读本文。项目配置,我使用SpringBoot2.x版本,Tomcat9.x版本,jdk1.8版本。我使用maven来管理项目。接下来我就把我的实现过程分享给大家。配置包管理文件打开项目根目录下的pom.xml文件,在project标签下声明打包格式为war。代码如下:warexcludesbuilt-in打包tomcat时,默认会打包内置的tomcat,造成冲突,所以这里我们需要排除掉内置的,在dependencies标签下添加如下依赖。org.springframework.bootspring-boot-starter-tomcatprovided这里还有一种方式是在spring-boot-starter-web中排除依赖dependencyandexcludetomcat这样,也会排除websocket相关的包,你项目中的websocket将不再可用。需要手动引入javax.websocket-api的依赖。该依赖最后一次更新时间是2016年,所以不推荐这种方式。由于websocket使用的是外置tomcat,原来使用内置tomcat配置的东西可以删掉(当然也可以不删,但是为了代码规范还是删掉比较好),还有我删掉的东西如下:pom.xml中的依赖org.springframework.bootspring-boot-starter-websocketwebsocket的启动配置,代码如下standard.ServerEndpointExporter;/***websocket启动配置*/@ConfigurationpublicclassWebSocketConfig{@BeanpublicServerEndpointExporterserverEndpointExporter(){returnnewServerEndpointExporter();}}设置包名和路径如果不设置名称和路径,默认包名会有一个版本号,一个d包路径在当前项目的目标目录下,我们可以在pom.xml中的build标签下自定义,代码如下:修改启动类接下来我们修改SpringBoot的启动类继承SpringBootServletInitializer,重写configure方法,告诉它我们使用的是外部Tomcat,代码如下:@SpringBootApplicationpublicclassChatSystemServerApplicationextendsSpringBootServletInitializer{//外置tomcat需要继承SpringBootServletInitializer,重写SpringApplicationBuilder@OverrideprotectedSpringApplicationBuilderconfigure(SpringApplicationBuilderapplication){returnapplication.sources(ChatSystemServerApplication.class);}publicstaticvoidmain(String[]args){SpringApplication.run(ChatSystemServerApplication.class,args);}}至此,我们的项目配置部分就完成了,我们刷新pom.xml文件,在idea的maven工具栏点击clean,然后点击package,就可以在创建war包了target目录Tomcat配置我的项目开启了https。使用外部tomcat后,application.yml中配置的https会失效。我们需要在tomcat中重新配置它。开启https访问,我们打开tomcat的conf目录下的server.xml,在Service标签中找到名为Catalina的标签,修改port和redirectPort属性。代码如下:然后,在上述标签后添加如下代码,使非80端口访问跳转到443端口配置SSL证书。将域名证书文件server.jks和keystorePass.txt放在conf目录下,在server.xml中名为Catalina的Service标签中添加如下代码。certificateKeystoreFile是你的证书文件,certificateKeystorePassword是你的证书文件密码。此密码在keystorePass.txt文件中配置。路径访问将war包放到tomcat的webapps目录下,我们要反问需要带上项目名。如果不加项目名就可以直接访问我们的项目,就需要单独配置了。在server.xml文件中,找到标签,在里面添加Context标签,代码如下:Contextpath=""docBase="">path:If留空,表示域名根目录,docBase为你的war包所在目录设置默认主页。由于我们修改了tomcat的默认访问页面,所以所有的根目录访问都不会去到ROOT目录下的页面。这时候需要在项目中配置一个根目录。映射,让它跳转到我们指定的项目中ststic中的页面,代码如下://默认主页映射@ControllerpublicclassDefaultController{@RequestMapping("/")publicStringWelcome(){return"forward:index.html";}}