0x01. 概述
SpringBoot 平时我们用的爽歪歪, 爽到它自己连 Tomcat 都自集成了, 我们可以直接编写 SBT 启动类, 然后一键开启内置的 Tomcat 容器服务, 确实是很好上手. 但考虑到实际的情形中, 我们的 Tomcat 服务器一般是另外部署好了的, 有专门的维护方式. 此时我们需要剥离掉 SBT 应用内置的 Tomcat 服务器, 进而将应用发布并部署到外置的 Tomcat 容器之中, 本文就实践一下这个.
0x02. 修改打包方式
修改项目的 pom.xml 配置, 我们修改其打包方式为 war 方式, 如:
- <groupId>com.example</groupId>
- <artifactId>demo</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>war</packaging>
0x03. 移除 SBT 自带的嵌入式 Tomcat
修改 pom.xml, 从 maven 的 pom 中移除 springboot 自带的的嵌入式 tomcat 插件
- <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>
0x04. 添加 servlet-api 依赖
修改 pom.xml, 在 maven 的 pom 中添加 servlet-api 的依赖
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- <scope>provided</scope>
- </dependency>
0x05. 修改启动类, 并重写初始化方法
在 SpringBoot 中我们平常用 main 方法启动的方式, 都有一个 SpringBootApplication 的启动类, 类似代码如下:
- @SpringBootApplication
- public class Application {
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
- }
- }
而我们现在需要类似于 web.xml 的配置方式来启动 spring 应用, 为此, 我们在 Application 类的同级添加一个 SpringBootStartApplication 类, 其代码如下:
- // 修改启动类, 继承 SpringBootServletInitializer 并重写 configure 方法
- public class SpringBootStartApplication extends SpringBootServletInitializer {
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
- // 注意这里一定要指向原先用 main 方法执行的 Application 启动类
- return builder.sources(Application.class);
- }
- }
0x06. 部署到外部的 Tomcat 容器并验证
在项目根目录下 (即包含 pom.xml 的目录) 记性 maven 打包操作:
mvn clean package
等待打包完成, 出现
[INFO] BUILD SUCCESS
即为打包成功
然后我们把 target 目录下生成的 war 包放到 tomcat 的 webapps 目录下, 启动 tomcat, 即可自动解压部署.
最后在浏览器中验证:
http://YOUR_IP:[端口号]/[打包项目名]
也可以直接将项目命名为 ROOT, 这样访问根目录即可访问 tomcat 中的 SpringBoot 应用
http://YOUR_IP:[端口号]
0x07. 后记
作者更多的原创文章在云栖社区
来源: https://yq.aliyun.com/articles/599514