SpringBoot打war包运行在独立Tomcat的方式

2023-05-16

第一种方式:手动配置

1.修改pom.xml文件

1.添加<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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.joe</groupId>
    <artifactId>learn</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

2.添加额外的tomcat(spring-boot-starter-tomcat)依赖,scope(作用域)设置为provided(该依赖编译和测试时有效,打包时不会被包含进去,在独立运行时由服务器提供)以防与独立运行时的tomcat的版本发生冲突。

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

*注意:spring-boot-starter-web中依赖的spring-boot-starter-tomcat排不排除都可以,采用继承<parent>方式开启的SpringBoot方式,后面显式导入的会自动覆盖隐式依赖的。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

2.继承SpringBootServletInitializer抽象类并实现configure方法

两种方式:
1.直接在启动类继承SpringBootServletInitializer并实现configure方法

@SpringBootApplication
public class LearnApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(LearnApplication.class);
    }

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

}

2.在启动类同包或子包下新建一个类继承SpringBootServletInitializer并实现configure方法

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(LearnApplication.class);
    }

}

3.建议pom.xml文件中<build></build>标签下添加<finalName></finalName>标签

<finalName></finalName>作用:定义了编译、打包、部署的项目名称。
源码里面这样描述:
The filename (excluding the extension, and with no path information) that the produced artifact will be called. The default value is ${artifactId}-${version};.
该部分引用了原文链接:https://blog.csdn.net/qq_33512843/article/details/80951741
使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的

server.port=
server.servlet.context-path=

将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问。

为了防止应用上下文所导致的项目访问资源加载不到的问题,

建议pom.xml文件中<build></build>标签下添加<finalName></finalName>标签

	<build>
        <finalName>learn</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

4.如果在resources之外有其他的静态资源包,需要指定打包时的静态资源路径

 	<build>
        <finalName>learn</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory> <!-- 默认的资源路径,如果有其它显式配置,会覆盖默认的,所以需要再配置一下-->
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java/com/joe/learn/dao</directory> <!-- 仅作为演示,建议放入resources中-->
                <includes>
                    <include>*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

5.使用mvn命令行打包,运行:

该部分引用了原文链接:https://blog.csdn.net/qq_33512843/article/details/80951741
clean是清除之前的包,-Dmaven.test.skip=true是忽略测试代码

jar 方式打包,使用内置Tomcat:mvn clean install -Dmaven.test.skip=true

运行:java -jar 包名.jar

war方式打包,使用外置Tomcat:mvn clean package -Dmaven.test.skip=true

运行:${Tomcat_home}/bin/目录下执行startup.bat(windows)或者startup.sh(linux)

第二种方式:新建SpringBoot项目时,将打包方式选择为war

当选为war时,SpringBoot默认该项目为web项目,而且要打成war包在独立的服务器上运行,所以SpringBoot会自动帮你完成第一种方式的第1步和第2步。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot打war包运行在独立Tomcat的方式 的相关文章

  • 基于MFC的USB上位机开发(3)数据传输模块

    延伸阅读 基于MFC的USB上位机开发 1 概述 基于MFC的USB上位机开发 2 速度测试模块 基于MFC的USB上位机开发 3 数据传输模块 基于MFC的USB上位机开发 4 环路模块 基于MFC的USB上位机开发 5 下环路模块 目录
  • 虚拟现实的起源、发展、爆发与沉淀

    虚拟现实的三生三世 闲来无事翻篇外文 xff0c 本博主并非故意蹭热点 xff08 奸笑 xff09 xff0c 结尾我会细说为何是三生三世 xff0c 不是五生五世 xff1a 虚拟现实远早于这个概念被创造和形式化之前 在这篇描写虚拟现实
  • 基于卷积的密度统计(一)密度图的生成

    在基于卷积的人数统计中 xff0c 一种是最后回归整张图的人数 xff0c 即输入图像 xff0c 输出人群个数 xff0c 另外一种是回归人群分布密度图 xff0c 即输入图像 xff0c 得到的是密度分布 显然得到密度分布的人数统计方法
  • Python使用国内镜像

    国内镜像地址 xff1a 阿里云 xff1a https mirrors aliyun com pypi simple 清华 xff1a https pypi tuna tsinghua edu cn simple中国科技大学 https
  • [RK3568 Android11] 开发之蓝牙(AP6275S)

    目录 前言 一 设备树dts配置 二 蓝牙打不开 三 蓝牙打开成功 四 修改蓝牙设备名称
  • XFCE菜单列表

    vim etc xdg xfce4 panel xfce4 menu 19 rc use default menu 61 true menu file 61 etc xdg menus xfce applications menu icon
  • X的DISPLAY=:0.0

    ZZ http blog 163 com caizf1987 64 126 blog static 13212128020104611592660 在Linux Unix类操作系统上 DISPLAY用来设置将图形显示到何处 直接登陆图形界面
  • 国外服务器上玩游戏延迟很高,什么原因造成的?

    在国外服务器玩游戏为什么延迟很高 有的比较热门的国际游戏 xff0c 为了玩家通常都会将整个游戏的区服划分为亚服 欧服 美服 东南亚服 韩服等等 xff0c 这主要是为了玩家有个良好的游戏体验 xff0c 那为什么在外服 国外服务器 上玩游
  • 公司抽奖小程序(自定义名单,空格控制滚动、抽奖,可作弊,可满足千人团队, 带可执行程序下载及源代码)

    内含 抽奖小程序 及 名单生成工具 使用时将两个小程序放在 同一目录下 先用名单生成工具生成名单 打开工具 按照提示输入要创建的参与抽奖的人数 输入每个人的编号及姓名 每行一个编号 空格 姓名 打开程序 复制粘贴即可 先用excel或者tx
  • 大厂面试之JAVA核心技能:Slipped Conditions

    聊聊Splipped Condtion 定义一个更现实的例子解决Slipped Conditions问题 定义 所谓Slipped conditions xff0c 就是说 xff0c 从一个线程检查某一特定条件到该线程操作此条件期间 xf
  • 一文带你彻底搞懂Docker中的cgroup

    前言 进程在系统中使用CPU 内存 磁盘等计算资源或者存储资源还是比较随心所欲的 xff0c 我们希望对进程资源利用进行限制 xff0c 对进程资源的使用进行追踪 这就让cgroup的出现成为了可能 xff0c 它用来统一将进程进行分组 x
  • 一文彻底搞懂Docker中的namespace

    什么是namespace namespace是对全局系统资源的一种封装隔离 这样可以让不同namespace的进程拥有独立的全局系统资源 这样改变一个namespace的系统资源只会影响当前namespace中的进程 xff0c 对其它na
  • 带你玩转多进程编程(一)

    前言 之前用加法器的例子一文带你轻松掌握多种范式讲解了多种范式的封装差异得到了很多童鞋的阅读 这次我再通过对进程的封装来给大家继续加深讲解下关于这几种编程范式的差异吧 结构化设计 相对于pthread create 函数 xff0c for
  • 【网易面试题】如何实现一个线程安全的shared_ptr智能指针

    题目描述 网易一面遇到过这么一个题目 xff0c 面试官要求自己实现一个线程安全的shared ptr智能指针 题目分析 可能很多人只知道shared ptr是C 43 43 11模块库的头文件定义的一个智能指针 xff0c 即shared
  • Ubuntu命令行安装Teamviewer

    1 预备安装 更新32位架构 sudo dpkg add architecture i386 更新安装 sudo apt get update 2 使用deb安装 官网下载 xff1a https www teamviewer com en
  • 阿里云数据湖分析急招实习生

    团队介绍 OSS 对象存储的概念可能对很多同学相对比较陌生 xff0c 但其实和大家紧密相关 xff0c 因为整个阿里集团业务以及阿里云外部客户的视频 图片 JS和CSS等资源全部都存储在我们这里 xff0c 可以说国内每天使用互联网应用的
  • 源码剖析Redis中如何使用跳表的

    前言 阿里云今年春招校招面试题 xff0c 面试官问Redis在是如何使用跳表的 xff1f 让很多同学赶到很头疼 今天我们就来讲一讲吧 Sorted Set的结构 redis的数据类型中有序集合 xff08 sorted set xff0
  • 多进程生产者消费者框架设计

    前言 介绍了进程如何基于面向对象的封装 xff0c 本章我们基于封装好的Process类来实现一种无锁版的生产者和消费者框架 xff0c 用它实现了高性能文件拷贝功能 读这篇文章之前大家可以想一下如果是你 xff0c 你会怎么设计这样的框架
  • golang实现简单rpc调用

    RPC通信过程 RPC的通信过程网上介绍很多 xff0c 这里就不在单独介绍了 xff0c 具体过程如下 xff1a 1 Client以本地调用的方式发起调用 xff1b 2 Client stub收到调用后负责将被调用的方法名 参数等打包
  • 一文彻底搞懂leveldb架构

    leveldb leveldb是一个写性能十分优秀的存储引擎 xff0c 是典型的LSM tree的实现 LSM的核心思想是为了换取最大的写性能而放弃掉部分读性能 那么 xff0c 为什么leveldb写性能高 xff1f 简单来说它就是尽

随机推荐

  • flink核心之watermarker

    背景介绍 xff1a 现在的社会 xff0c 人们产生越来越多的数据 xff0c 而数据对每个人人都产生了巨大的影响 比如你去银行贷款 xff0c 那么必然银行要对你做信用评估 xff0c 会涉及到大数据画像等数据分析 比如美团外卖 xff
  • 我在华为度过的 “两辈子”(学习那些在大厂表现优秀的人)

    七 是一个很神奇的数字 生物学中认为组成身体的细胞 xff0c 七年会彻底更新一遍 xff1b 李笑来说 xff0c 七年就是一辈子 xff0c 每一辈子至少要习得一个重要的技能 xff0c 进而获得不可逆的重生 xff1b 白居易写道 x
  • 【Effective Java】大厂实战之考虑以静态工厂方法代替构造方法

    图片 Item1 考虑以静态工厂方法代替构造方法 Item1 考虑以静态工厂方法代替构造方法 缺点1 只提供静态工厂方法的话 xff0c 该类就无法被继承 xff08 子类化 xff09 缺点2 API的查找比较麻烦 常见静态工厂方法的命名
  • 一文搞懂leveldb写操作

    前言 leveldb一直也它优秀的写性能而文明 xff0c 本篇文章我们就来分析下leveldb的写流程 来搞懂为什么它的写性能如此优秀 整理流程 leveldb一次写入分为两部分 xff1a 第一步先将写操作写入日志 第二步将写操作应用到
  • 来聊聊对象文件网关和分布式文件存储的区别

    前言 大家都知道 xff0c 存储系统一般分为块存储 对象存储和文件存储三种 其中文件存储的使用最广泛 xff0c 个人电脑 NAS 大到传统的HPC 大数据平台等等 这些都是以使用文件接口为主 最近几年 xff0c 由于成本低 存储空间大
  • Ubuntu中文件属性以及所属用户问题

    1 xff0c 查看文件属性 xff0c 命令如下 xff1a 查看当前目录下某个文件属性 ls l lt file name gt 查看当前目录下文件属性 ls l 查看所有当前文件下属性 ls al 在开始的 rwxr xr x 为该文
  • Android8.0 屏幕旋转180度

    一般手机只能旋转3个方向 xff0c 这里将介绍如何让手机可以旋转180度 xff0c 也就是上下颠倒 1 静态方法 frameworks base core res res values config xml config allowAl
  • 深度理解go中的Map

    这里写自定义目录标题 前言map的内存模型增量扩容查找过程分析插入过程分析 前言 本篇将从底层讲解map的赋值 删除 查询 扩容的具体执行过程 结合源码 xff0c 让你彻底明白map的原理 map的内存模型 在源码中 xff0c 表示ma
  • 在职场我们该具备哪些能力

    专才or 通才 不知道大家有没有这样的感觉 xff0c 现在的工作专业化程度越来越高 xff0c 细分粒度也越来越小 IT领域分到你是计算里面的数据库或者了流式计算引擎 xff0c 或者是协议存储还是KV存储引擎 专业化的程度带来了一个好处
  • 【zabbix Java开发教程】docker部署zabbix及api获取实战教程

    文章目录 Docker安装移除旧版本的docker环境安装必要系统工具添加源信息更新yum缓存安装Docker ce 启动Docker测试运行hello world 修改源 Docker部署zabbix创建zabbix的MySQL运行zab
  • go版本分布式锁redsync使用教程

    redsync使用教程 前言redsync结构Pool结构Mutex结构acquire加锁操作release解锁操作 redsync包的使用 前言 在编程语言中锁可以理解为一个变量 xff0c 该变量在同一时刻只能有一个线程拥有 xff0c
  • Fragment实例精讲——底部导航栏的实现(3)

    转自 xff1a http www runoob com w3cnote android tutorial fragment demo3 html 本节引言 前面我们已经跟大家讲解了实现底部导航栏的两种方案 xff0c 但是这两种方案只适合
  • Android NavigationBar 背景设置成完全透明不起作用

    lt item name 61 34 android navigationBarColor 34 gt 64 android color transparent lt item gt 使用 android navigationBarColo
  • 计算机视觉CV中RANSAC算法的学习笔记~

    1 致谢 感谢网友叶晚zd的博客 xff0c 原文链接如下 xff1a https blog csdn net u013925378 article details 82907502 2 RANSAC算法介绍 随机抽样一致算法 xff08
  • 【Java】JsonArray用法

    1 解析字符串为JsonArray JSONArray jsonArray 61 JSONArray parseArray str 2 存值 jsonArray add object 3 取值 for int i 61 0 i lt jso
  • 怎么用JMeter写性能测试脚本

    JMeter 可能是应用最广泛的性能测试工具 怎么用 JMeter 编写性能测试脚本 xff1f 一 脚本制作原则 我们一般写代码 xff0c 都会有代码规范 xff0c 比如写java有java规范 xff0c 写python有pytho
  • Android MVP Contract分析

    相关文章 xff1a Android MVP Contract 谷歌官方MVP Contract分析 View 只处理UI及页面效果的细节 xff0c 向Presenter暴露更新UI的方法 xff1b 并且持有Presenter的引用 x
  • 《Flask Web开发实战》第一章初识Flask——李辉,读书笔记

    目录 第一章 初识Flask开发环境的搭建使用Pipenv管理Python包 hello Flask启动开发服务器修改默认的重载器修改配置参数实现类似flask run的命令的方式 结尾 第一章 初识Flask 本章主要介绍了一些关于Fla
  • 基于cat12和SPM12进行VBM&SBM数据分析笔记1——数据预处理

    前言 今年是小编步入研究生生活的第一年 xff0c 研究方向待定 xff0c 但主要以磁共振成像为主 xff0c 以后会不断地总结这方面的知识 xff0c 涉及MRI xff0c 数据分析基础方法理论 xff0c 软件操作教程 xff0c
  • SpringBoot打war包运行在独立Tomcat的方式

    第一种方式 xff1a 手动配置 1 修改pom xml文件 1 添加 lt packaging gt war lt packaging gt span class token operator lt span span class tok