Spring Boot 初级入门教程(十三) —— 打完整 war 包、部署和测试(附源码)
2018年08月18日 09:52:38 SpringBoot ⁄ 共 2321字 暂无评论 ⁄ 被围观 3,334次

前面几篇文章介绍了如何打 jar 包并如何在服务器环境上测试,那么这篇就说说如何打 war 包并在 tomcat 服务器上部署测试。

毕竟在开发过程中,很多项目都是 web 项目,最熟悉的还是直接部署在 tomcat 服务器中运行,本地开发也是在 IDE 开发环境配置服务器,并发布运行。只不过 SpringBoot 项目开发时只是把服务器环境已经通过依赖包嵌入到了项目中,并且可以通过它独特的启动方式 run as 来运行项目而已,不用把项目再次发布到 tomcat 服务器。

当然很多服务器上,都是原有的 tomcat 服务器,很多时候需要把服务直接部署到这些已有的 tomcat 中,才能解决跨域等问题,所以在本地如何让 springboot 项目在 tomcat 中发布运行,以及如何打 war 包放到服务器上的 tomcat 中对外发布,就显得尤为重要了。

一、修改打包类型

由于前面几篇文章都是介绍打 jar 包,配置文件中配置都是 jar,现在要打 war 包,所以先修改 pom 文件中的打包类型,如下:

	<groupId>com.menglanglang</groupId>
	<artifactId>test-springboot</artifactId>
	<version>1.0</version>
	<!-- <packaging>jar</packaging> -->
	<packaging>war</packaging>

修改后,直接打包,操作步骤和打 jar 包的步骤一致。

这一步,也许会报错误为:webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode),如果出现该错误,请参考上篇文章《Spring Boot 初级入门教程(十二) —— 运行、测试、打包过程中碰到的各种错误》中提到的解决方式。

打包成功后,可以看到 target 目录结构如下:

二、修改包名

可以看到上一步打包生成的 war 包名,是当前项目的配置中,artifactId-version.war,当然一个 SpringBoot 项目中,这两个配置新建项目后一般是固定的,所以想修改打包后生成的 war 包名,可以在 build 配置部分配置包名,如下:

	<build>
		<!-- 配置打包后的包名 -->
		<finalName>testsb</finalName>
		<!-- 。。。其它配置。。。 -->
	</build>

修改配置后,maven clean,清空 target 下原有文件,再次打包,可以看到生成的 target 目录结构如下:

三、排除 SpringBoot 内嵌的 tomcat 包

由于目的是打 war 包部署到 tomcat 进行测试,所以 SpringBoot 内嵌的 tomcat 可以排除掉,否则打包部署后,与 tomcat 服务器有冲突,导致报错并无法启动服务。排除 tomcat 内嵌 jar 配置如下:

		<!-- 该依赖包提供了MVC、AOP等的依赖包 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<version>2.0.2.RELEASE</version>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

四、注册启动类

创建 ServletInitializer.java,继承 SpringBootServletInitializer,覆盖 configure(),把启动类 App 注册进去。外部 web 应用服务器 tomcat 构建 Web Application Context 的时候,会把启动类添加进去。

如果没有注册启动类,部署后启动 tomcat 虽然不报错,但服务访问不了。ServletInitializer.java 代码如下:

package com.menglanglang.test.springboot;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

/**
 * @desc 注册启动类
 *
 * @author 孟郎郎
 * @blog http://blog.csdn.net/tzhuwb
 * @version 1.0
 * @date 2018年8月18日上午9:38:22
 */
public class ServletInitializer extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		// APP.class 为项目启动类,按照当前启动类名修改即可
		return builder.sources(App.class);
	}

}

五、部署测试

将 war 包部署到服务器 tomcat 中,启动并测试。如果启动正常,可以看到原先这是的 banner 等信息。打开浏览器,输入测试接口测试即可。

截止目前,最新代码包下载:https://pan.baidu.com/s/1_H_biwZROU9mo6BUOAhOxA

给我留言

留言无头像?