Spring Boot 2.x实践记:war包
Posted mickjoust
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 2.x实践记:war包相关的知识,希望对你有一定的参考价值。
目录
- 声明为war类型
- 修改Tomcat的作用域
- 重写启动类
- 小结
TL;DR
虽然Spring Boot 默认使用,但某些场景下还是需要打成war包来运行在Tomcat中。
下面的方法能快速的打包一个Spring Boot应用为war包。
声明为war类型
首先,在pom.xml文件中声明包装类型为war
。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd;
...
<packaging>war</packaging>
...
</project>
注意,当没有声明包装时,Maven会假定工件为默认值:jar。
修改Tomcat的作用域
打包成war包的目的在于,不使用嵌入服务器运行时的一些依赖项,所以,这里我们需要将Tomcat依赖项的范围设置为provided
。
- provided:代表该作用域仅在编译和测试类路径上才可用,并且不可传递。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd;
... ...
<packaging>war</packaging>
... ...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
重写启动类
根据官网:howto-create-a-deployable-war-file 的提示,将Spring Boot 打包成war包时,除了变更tomcat的运行作用域依赖外,还需要重写类SpringBootServletInitializer
的configure
方法,不然,以war包运行时会出现问题。
package com.mickjoust.demo.springboot2_in_action.war;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* @author mickjoust
**/
@SpringBootApplication
public class AppStartWar extends SpringBootServletInitializer
public static void main(String[] args)
SpringApplication.run(AppStartWar.class,args);
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
return application.sources(AppStartWar.class);
小结
虽然Spring Boot 用war的情况比较少,但是遇到时再查询会比较麻烦。
本文提供了一个直观简便的办法来生成可执行的war包,供您参考。
欢迎留言。
以上是关于Spring Boot 2.x实践记:war包的主要内容,如果未能解决你的问题,请参考以下文章