Spring Boot 一个非常方便的功能就是支持内置的 Servlet 容器,一般我们部署 Spring Boot 应用时都是打成一个可执行的 Jar 包进行部署。其实 Spring Boot 也是支持打成传统的 war 包部署的。肯定有人问:既然 Jar 包简单又方便,为什么还要 用 war 包部署呢?其实我就是自己折腾下,哈哈~

需要注意的是,假如你的应用使用了 Spring 的 WebFlux 功能,那么是不支持 war 包部署的。

配置调整

1. 修改 pom.xml 中的打包方式

<packaging>war</packaging>

2. 调整依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <!-- 该包只在编译和测试的时候使用 -->
<scope>provided</scope>
</dependency>

3. 继承 SpringBootServletInitializer

@SpringBootApplication
public class AppQuickStart extends SpringBootServletInitializer { private static Logger logger = LoggerFactory.getLogger(AppQuickStart.class); public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
logger.info("app begin to start...");
SpringApplication.run(AppQuickStart.class, args);
logger.info("app start success...");
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(AppQuickStart.class);
}
}

4. 一些其他注意点

下面是 build 的配置,主要是设置了应用的名称,还用就是加了maven-war-plugin这个插件,不然会报找不到web.xml这个错误。

<build>
<finalName>appName</finalName>
<!-- 省略其他配置 -->
<plugins>
<plugin>
<configuration>
<excludeDevtools>true</excludeDevtools>
</configuration>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>

好了,到此就可以执行mvn clean install命令打包了。

报 404 问题

网上有很多文章说 Spring Boot 应用打成 war 部署 Tomcat 后访问接口会报 404 错误。如果你是完全上面的步骤配置的不应该会有问题。

假如真的有问题,建议从下面几方面来解决:

  • URL 有没有写对:部署 Tomcat 后是需要填写 context-path 的,这个 context-path 并不是 Spring Boot 中配置的,而是 Tomcat 中配置的,如果你没对 Tomcat 做特殊的配置,那么这个 context-path 就是你打包好的项目的名称;
  • 检查接口参数有没传对;
  • 终极办法,打开日志的 Dubug 级别,一般问题都能看出来,如果你日志是 info 级别,你的全局异常处理没做到位,有些异常是看不出来的。

最新文章

  1. failed to lazily initialize a collection of role:XXX, no sessi
  2. angularJS——ng-bind指令与插值的区别
  3. C#动态方法调用
  4. IOS导航栏的使用方法
  5. WCF学习笔记(二):简单调用
  6. Maven安装与更新
  7. RESTFul中的那些事(1)---在RESTFul中,HTTP Put和Patch操作的差别?
  8. ngrok首页、文档和下载 - Web服务安全通道 - 开源中国社区
  9. 产品 线上 保持 和 支持 服务 (Support and maintenance solutions)
  10. Visual C++ 6.0中if语句的常见问题
  11. (map string)Crazy Search hdu1381
  12. 20165231 2017-2018-2 《Java程序设计》第3周学习总结
  13. C#学习-类的成员
  14. c# zxing生成二维码和打印
  15. 去掉m3u8的片头和片尾
  16. CPU的硬件结构和汇编语言
  17. Oracle 12C -- Invisible Columns
  18. 获取微信小程序源码
  19. Dubbo 环境搭建
  20. addEvent兼容版

热门文章

  1. Go | Go 语言打包静态文件以及如何与Gin一起使用Go-bindata
  2. ZK的watch机制
  3. wordpress建站如何用SMTP配置邮件通知
  4. openssh一键升级脚本(只升级openssh,其它已有环境不变,解决root登录问题)
  5. 符合SEO的网站标题应该怎么写
  6. Combine 框架,从0到1 —— 3.使用 Subscriber 控制发布速度
  7. OpenSIPS 2.4.2 高并发下,日志丢失怎么办
  8. 都2020年了,还再问GET和POST的区别?【深度好文】
  9. HTTPS协议原理解析
  10. 【已学完】UGUI Schedule