SpringBoot打成war包发布 | 张扎瓦的博客

SpringBoot打成war包发布

本文介绍了将SpringBoot打成war包的具体操作步骤


前言

在使用SpringBoot时,我们一般都是将SpringBoot打包成jar包,然后直接使用

1
java -jar xxx.jar

的方式运行,但有时候可能会因为其他问题,需要放到tomcat中运行。

例如:甲方服务器只开放一个8080端口供外部使用,而我们的项目有好多个都需要外网访问,这样就必须将多个项目放入同一个tomcat,用路径去区分访问了。

具体步骤

修改maven打包方式

1
2
<!-- 修改打包方式为war -->
<packaging>war</packaging>

移除内嵌的tomcat

1
2
3
4
5
6
7
8
9
10
11
12
13
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>

<!-- 移除内部tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>

</dependency>

增加servlet依赖

1
2
3
4
5
6
7
<!-- 增加servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

修改启动类

在原来的启动类同级目录下,新建一个类,继承SpringBootServletInitializer,并重写configure方法

1
2
3
4
5
6
7
8
9
10
/**
* 使用tomcat方式启动
*/
public class TomcatApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 这里的 CollectApplication 就是原来的启动类
return builder.sources(CollectApplication.class);
}
}

打包部署

使用maven打包,将打包好的war包放入tomcat的webapps 下,启动tomcat即可。

可能遇到的问题

如果你使用的是tomcat7启动,可能会报如下错误:

1
java.lang.NoClassDefFoundError: javax/el/ELManager

解决方法1:

直接使用tomcat8

解决办法2:

下载el-api3.0.jar包,放入tomcat的lib中。这里是下载链接

或者从tomcat8的lib包中,拷贝el-api.jar放入tomcat7的lib中

如果我的文章对您有所帮助,不妨打赏一杯豆浆以资鼓励(○` 3′○)