写作时间:-02-27
Spring Boot: 2.1 ,JDK: 1.8, IDE: IntelliJ IDEA,
说明
项目打成war包部署到外部的Tomcat上,要达到这种目的,需要修改一些东西。
1. 新建SprintBoot工程
1.1 IDEA新建一个SpringBoot工程,pom.xml
添加web依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
1.2DemoApplication.java
类添加根路径返回字符串
@SpringBootApplication@RestControllerpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@RequestMapping("/")public String index() {return "Greetings from Spring Boot!";}}
1.3 运行项目,访问首页
% curl http://localhost:8080Greetings from Spring Boot!%
如果需要实践SprintBoot请参考:【第一篇:构建第一个SpringBoot工程】
2. 修改Maven的打包方式
在pon.xml
添加一项,Maven默认的packing为jar,所以要将其改为war:
<packaging>war</packaging>
添加的位置如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- ... --><packaging>war</packaging><!-- ... --></project>
3. 修改内迁容器的依赖范围
在pom.xml
中添加依赖,将spring-boot-starter-tomcat
的要构建可执行并可部署到外部容器中的war文件,需要将嵌入容器依赖项标记为provided
,如以下示例所示:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency>
4. 修改启动类
因为
Spring WebFlux
没有严格的依赖于Servlet API
和 applications 部署在默认集成的Reactor Netty server
,War
部署并不支持WebFlux applications
.
部署为war
文件的第一步是,启动类要继承于子类SpringBootServletInitializer
, 并且要重载方法configure
. 这样处理是为了让Spring Framework’s Servlet 3.0
支持并配置应用被servlet container
加载. 通常的做法是,修改application’s main
类去集成子类SpringBootServletInitializer
, 修改如下:
package com.zgpeace.springboot;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;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@SpringBootApplication@RestControllerpublic class DemoApplication extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(DemoApplication.class);}@RequestMapping("/")public String index() {return "Greetings from Spring Boot!";}}
5. Maven打包
5.1 在IDEA的右侧点击Maven Projects > package > Run, 就开始构建package
5.2 最终控制台显示如下日志, 表示成功
...[INFO] --- maven-war-plugin:3.2.3:war (default-war) @ demo ---[INFO] Packaging webapp[INFO] Assembling webapp [demo] in [/Users/zgpeace/Spring-Boot/basic/ExportToTomcat/target/demo-0.0.1-SNAPSHOT][INFO] Processing war project[INFO] Webapp assembled in [147 msecs][INFO] Building war: /Users/zgpeace/Spring-Boot/basic/ExportToTomcat/target/demo-0.0.1-SNAPSHOT.war[INFO] [INFO] --- spring-boot-maven-plugin:2.1.13.RELEASE:repackage (repackage) @ demo ---[INFO] Replacing main artifact with repackaged archive[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 7.528 s[INFO] Finished at: -02-28T07:44:23+08:00[INFO] Final Memory: 31M/389M
5.3 在target
下面可以找到打出来的包demo-0.0.1-SNAPSHOT.war
5.3 在war包上右键Reveal in Finder
,拷贝war
包,放到Tomcat的webapp目录下, 启动Tomcat, 运行链接记得要加上访问路径,结果如下:
% curl http://localhost:8080/demo-0.0.1-SNAPSHOT/Greetings from Spring Boot!%
如果启动有问题,可以先访问http://localhost:8080
,看看Tomcat是否启动成功。更多Tomcat知识请参考:Mac下安装配置Tomcat 9, Homebrew安装Tomcat
代码下载
/zgpeace/Spring-Boot2.1/tree/master/basic/ExportToTomcat
参考
https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/htmlsingle/#build-tool-plugins-maven-packaging
https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/htmlsingle/#howto-create-a-deployable-war-file
/zgpeace/article/details/104529616
/zgpeace/article/details/85111272