易筋SpringBoot 2.1 | 第三十四篇:Spring Boot导出war包部署到外部Tomcat

写作时间:2020-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.2 DemoApplication.java类添加根路径返回字符串

@SpringBootApplication
@RestController
public 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:8080
Greetings 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="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/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.

扫描二维码关注公众号,回复: 10733622 查看本文章

部署为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
@RestController
public class DemoApplication extends SpringBootServletInitializer {

  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }

  @Override
  protected 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: 2020-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

代码下载

https://github.com/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

https://blog.csdn.net/zgpeace/article/details/104529616

https://blog.csdn.net/zgpeace/article/details/85111272

发布了167 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zgpeace/article/details/104547552