写作时间: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.

部署为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);}@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: 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

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

  1. SpringBoot webmvc项目导出war包并在外部tomcat运行产生的诸多问题以及解决方案

    背景: 有需求要将原来的Spring(3.2.6) + Springmvc + Hibernate项目重构为Springboot(1.5.2)项目 描述: 记录重构过程,以及期间遇到的种种问题和对应的 ...

  2. 【金三银四】Spring Boot面试题(2021最新版)

    目录 前言 1. 什么是SpringBoot? 2. 为什么要用SpringBoot 3. SpringBoot与SpringCloud 区别 4. Spring Boot 有哪些优点? 5. Spr ...

  3. Spring Boot(十四):spring boot整合shiro-登录认证和权限管理

    Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...

  4. SpringBoot项目打成war包部署到外部Tomact运行

    需求:使用SpringBoot自带的Tomact在线上环境部署特别不方便,尤其是只更改几个文件就得全部打包部署,所以需要把SpringBoot打成war包部署到Tomact 1.在pom.xml中 由 ...

  5. (转)Spring Boot(十二):Spring Boot 如何测试打包部署

    http://www.ityouknow.com/springboot/2017/05/09/spring-boot-deploy.html 有很多网友会时不时的问我, Spring Boot 项目如 ...

  6. SpringBoot实战(十四):Spring Boot Admin 集成安全模块

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] Spring Boot Admin做为生产级的监控工具,必然不能随便让人去操作以免误操 ...

  7. (转)Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理

    http://www.ityouknow.com/springboot/2017/06/26/spring-boot-shiro.html 这篇文章我们来学习如何使用 Spring Boot 集成 A ...

  8. 从.Net到Java学习第四篇——spring boot+redis

    从.Net到Java学习系列目录 "学习java已经十天,有时也怀念当初.net的经典,让这语言将你我相连,怀念你......"接上一篇,本篇使用到的框架redis.FastJSO ...

  9. SpringBoot 项目war包部署 配置外置tomcat方法

    一般情况spring-boot-starter-web是自带tomcat(即springboot内嵌tomcat),所以打包直接生成jar包,用java -jar命令就可以启动.但,有时我们希望用wa ...

  10. “约见”面试官系列之常见面试题第三十四篇之事件冒泡、事件捕获、事件代理(建议收藏)

    对于事件的传播机制,Netscape Communicator采用的是事件捕获(event capture),IE9.Safari.Chrome.Opera和Firefox采用的是事件冒泡(event ...

最新文章

  1. 数组-0~n-1 中缺失的数(查找不存在的数)
  2. Windows中的命令行提示符里的Start命令执行路径包含空格时的问题
  3. Altium Designer -- PCB 叠层设计
  4. 每天一道LeetCode-----两个有序数组合并后的第K个数
  5. thinkphp5中使用workerman
  6. 硬件知识:u-boot和bootloader的区别
  7. L3-020 至多删三个字符 (30 分) DP
  8. 【统计学习】随机梯度下降法求解感知机模型
  9. 用户名和密码都正确,无法直接登陆虚拟机上的linux
  10. 基于opengl的2d机器人双人格斗游戏
  11. Java递归法解决猴子吃桃问题_C语言实现猴子吃桃问题(循环、递归两种方法)...
  12. 【Unity】跨场景音乐资源不间断播放(可控音量)
  13. 口袋里的mini宝贝,西圣Ava蓝牙耳机,百元即可享受好音质耳机
  14. GNSS算法相关开源代码(含多传感器融合相关项目)
  15. 阿里云服务器(centos)安装MySQL
  16. 关于Unity碰撞检测失败的冷门原因
  17. 【计量经济学导论】02. 多元回归模型
  18. Navicat Premium教程|Navicat Premium怎么用?
  19. 小猫爪:i.MX RT1050学习笔记23-FreeRTOS移植之宇宙最详细
  20. JavaSE---IO流基础(异常、File类、递归)

热门文章

  1. python 数据去重 max()_荐 用 Python 对 Excel 表格内数据进行去重、分类,标记异常及分析...
  2. Micropython教程之TPYBoard开发板制作电子时钟(萝卜学科编程教育)
  3. 使用Jest对原生TypeScript项目进行UI测试
  4. SQL代码自动生成器
  5. apache 目录认证
  6. 程序员的恶性循环:加班-没空学习-老是写同等水平代码-无法提升代码质量-老是出BUG-老是需要修改-加班-......
  7. 利用php利用root权限执行shell脚本必须进行以下几个步骤
  8. 《WinForm开发系列之控件篇》Item65 VScrollBar (暂无)
  9. java实现人民币数字和大写转换
  10. 国产计算机设备,国产计算机报价