项目场景:
正常情况下,我们开发 SpringBoot 项目,由于内置了Tomcat,所以项目可以直接启动,部署到服务器的时候,直接打成 jar 包,就可以运行了。
有时我们会需要打包成 war 包,放入外置的 Tomcat 中进行运行,或者使用工具idea直接启动,便于开发调试。
实现步骤
1、
将pom文件打包方式更改为 war
<packaging>war</packaging>
2、 排除内置 Tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除内置的tomcat -->
<exclusions>
<exclusion>
<artifactId>org.springframework.boot</artifactId>
<groupId>spring-boot-starter-tomcat</groupId>
</exclusion>
</exclusions>
</dependency>
3、添加tomcat依赖,需要用到 servlet-api 的相关 jar 包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- tomcat范围改成provided,否则后面就会出问题,tomcat无法解析jsp -->
<scope>provided</scope>
</dependency>
4、 继承 SpringBootServletInitializer 并重写 configure 方法
新建文件文件名随意,或者直接修改启动类继承 SpringBootServletInitializer 并重写 configure 方法,也是一样的。
package com.test;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* 注意,使用war方式部署,需要开启此类
*
*/
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ApplicationMain.class);
}
}
部署方式:
方式一:使用外部tomcat启动
1、利用maven命令打包
2、 将打的war包,复制粘贴到tomcat的webapps目录下(不用解压,启动tomcat自动解压)
3、启动tomcat
在tomcat安装目录下的bin目录下面找到startup.bat命令,启动tomcat
4、启动结果
war包自动解压了
5、 测试结果,访问swagger页面:
访问路径这里需要注意,原来我们在application.properties配置的访问路径已经不生效了。
这是原来访问路径:http://localhost:8080/testservice/swagger-ui.html
#已经不生效了
server.servlet.context-path=/testservice
现在的访问路径:
http://localhost:[端口号]/[打包项目名]/
比如我现在的访问路径就是:
http://localhost:8080/spring-boot-test-war/swagger-ui.html
spring-boot-test-war是我打包后的项目名,这个可以改的。
方式二:使用工具idea直接启动
1、配置web.xml文件
点击File->Project Structure
创建src/main/webapp和web.xml
此时项目结构图如下:
2、配置artifacts
配置完后,tomcat启动才能找到这个war包,会生成out目录输出文件。
当然你也可以选择target下面已经打包好的war包,但是这样有个缺点,就是每次改文件你都需要用maven重新打包,输出到target目录下,不方便开发。
3、配置tomcat
在IDEA右上角的项目运行列表中选中 Edit Configurations
进入新的窗口点击"+",找到Toncat Server中的Local进行点击,配置Tomcat路径
4、tomcat 选择启动的war包
这里注意选择exploded结尾的,才是out目录输出的
Application context上下文配置访问路径
访问路径这里需要注意,原来我们在application.properties配置的访问路径已经不生效了。
#已经不生效了
server.servlet.context-path=/testservice
现在的访问路径:
http://localhost:8080/testservice/swagger-ui.html
testservice是我Application context上下文配置的访问路径 ,这个可以改的。
5、配置tomcat启动默认打开的页面
6、启动结果
点击启动