Spring Boot 项目打成 war 包部署
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 级别,你的全局异常处理没做到位,有些异常是看不出来的。
Spring Boot 项目打成 war 包部署的更多相关文章
- spring boot 项目打成war包部署到服务器
这是spring boot学习的第二篇了,在上一篇已经整合了spring boot项目了,如果还有小伙伴没有看得可以先去看第一篇 基础整合spring boot项目 到这里的小伙伴应该都是会整合基本的 ...
- Spring boot 项目打成war包并在idea中运行
1. 修改pom文件原来是jar改成<packaging>war</packaging> 2. 在pom文件中添加移除内置tomcat并且添加添加servlet-api的依赖. ...
- IDEA下spring boot项目打包war包部署外部tomcat问题
第一步,修改配置pom.xml文件 <packaging>war</packaging> <dependency> <groupId>org.sprin ...
- 将web项目打成war包部署在tomcat步骤
将web项目打成war包部署在tomcat步骤 1.将自己的项目打成war包. 2.将打包好的war复制到${tomcat.home}/webapps项目下. 3.在${tomcat.hom}/con ...
- Web项目打成war包部署Tomcat时运行startup.bat直接闪退部署失败解决方案
即上篇通过将web项目打成war包部署到Tomcat服务器,解决mysql问题后,又出现了新问题,真是一波三折,所以将解决过程分享给大家,希望能帮助到小伙伴们~ 将打好的war包拷贝到Tomcat的w ...
- spring boot 项目打成war,丢入tomcat独立运行
小插曲:通过cmd运行startup.bat,cmd界面显示乱码 解决方法:进入tomcat目录,conf文件夹,用编辑器打开logging.properties 将java.util.logging ...
- Web项目打成war包部署到tomcat时报MySQL Access denied for user 'root'@'localhost' (using password: YES)错误解决方案
Web项目使用使用root账号root密码进行部署,通过Eclipse加载到Tomcat服务器可以发布成功,打成war包放到tomcat的webapps目录无法发布成功,报错: jdbc.proper ...
- springboot-把web项目打成war包部署到外部tomcat
将打包方式修改为war <packaging>war</packaging> 移除tomcat依赖或者将tomcat依赖scope改为provide 移除tomcat依赖 &l ...
- 【spring Boot】2.在Myecplise上把spring Boot项目打包 war包和jar包
========================================================第一部分======================================== ...
随机推荐
- Kafka内部实现原理
Kafka是什么 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算. 1)Apache Kafka是一个开源消息系统,由Scala写成.是由Apache软件基金会开 ...
- C++ 7种排序方法代码合集
class Solution { public: /******************************************************************** 直接插入排 ...
- IDEA报错:Class JavaLaunchHelper is implemented in both
在IDEA运行一个程序时报错: Class JavaLaunchHelper is implemented in both 这个错误是Mac下Java 的一个bug,意思是这个JavaLaunchHe ...
- YOLO v3算法介绍
图片来自https://towardsdatascience.com/yolo-v3-object-detection-with-keras-461d2cfccef6 数据前处理 输入的图片维数:(4 ...
- C语言基础练习——打印菱形
C语言基础练习--打印菱形 JERRY_Z. ~ 2020 / 8 / 26 转载请注明出处! 代码: /* * @Author: JERRY_Z. * @Date: 2020-08-26 17:17 ...
- CF208E Blood Cousins 题解
一个奇奇怪怪的复杂度很垃圾的线段树合并解法 通过分析可以发现,要找$x$的$k$辈兄弟,只需要找到$x$的$k$辈祖先,然后查找以该祖先为根的子树中和$x$深度相同的节点个数$-1$即可.也就是说,询 ...
- 做seo如何选择一个好的标题
http://www.wocaoseo.com/thread-86-1-1.html 我们常说人要红妆马配鞍,那么对于seo来说,网站的标题也是很重要的,如何写好标题呢?只要注意以下几点就行了. 首先 ...
- 原生 JavaScript30 练习 Day 1 (原生JS控制键盘模拟击鼓)
代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- 【Go语言入门系列】(七)如何使用Go的方法?
[Go语言入门系列]前面的文章: [Go语言入门系列](四)之map的使用 [Go语言入门系列](五)之指针和结构体的使用 [Go语言入门系列](六)之再探函数 本文介绍Go语言的方法的使用. 1. ...
- oeasy教您玩转linux010107那啥在哪 whereis
回忆上次内容 上次讲了 ls 的参数 (arguement) 和选项 (option) 的设置. 现在我们要制作这样一个列表: