开发工具中SpringBoot使用外置Tomcat启动 (亲测有效)-第458篇

news2024/10/6 0:37:27

历史文章(文章累计450+)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

SpringBoot添加外部jar包及打包(亲测有效) - 第452篇

SpringBoot引入外部jar包,项目打包成war包发布(亲测有效) - 第453篇

SpringBoot中使用Spring-Retry重试框架 - 第454篇

Spring的秒表StopWatch优雅的程序计时器 -第455篇

(我阳了)SpringBoot3正式版于11月24日发布:都有哪些新特性?- 第456篇

SpringBoot3初体验 - 第457篇

悟纤:师傅你最近好些了没有?

师傅:好多了,这个新冠不得了了。

悟纤:怎么说呢?

师傅:不同的人不同的症状,我最难受的阶段就是发高烧,烧的睡不着的那个阶段;还有

一点就是养成了晚上不好入睡的坏习惯。最近虽然都差不多了,但还是会不时的咳嗽。

悟纤:确实没有办法,现在只能说早得上早过个好年,不得上的概率感觉比中彩票的概率还低呢。

师傅:可不是吗,徒儿最近研究技术研究的怎么样了?

悟纤:又碰到了一个问题,这不之前实现了打包成war包,直接部署到tomcat的容器了吗,现在领导要求我们要直接引入外置Tomcat进行开发,这样开发环境和部署环境就一样了,也能够避免开发环境和部署环境不一样,导致的诡异问题。

师傅:这个还是很简单的,就是一些步骤,知道了也就闭着眼就能搞定了。

悟纤:那师傅赶紧和徒儿讲讲,我好去装逼一下。

导读

在前面有一个小节讲解了Spring Boot引入外部jar包,项目打包成war包发布,那么自然的会想,那么在开发的时候,是否就可以使用外置的Tomcat启动呢?

带着这个问题,一起来探个究竟。

一、准备工作

有些工作在前面的小节中已经介绍过了,这里不重复编写,但简单的做个说明。

1.1 环境说明

(1)操作系统:MacOS Catalina

(2)Idea:IntelliJ IDEA 2022.2.2 (Ultimate Edition)

(3)Spring Boot:2.7.6

(4)外置Tomcat:8.5.57

1.2 准备工作

(1)下载Tomcat,确保外置的Tomcat可以正常的启动,注意Tomcat的版本号最好是和Spring Boot相应的版本的Tomcat和JDK的版本号对应,免得碰到奇奇怪怪的问题。

(2)准备一个Spring Boot项目,确保以及配置好了war包的打包形式了,这一个步骤可以参考文章:

《SpringBoot引入外部jar包,项目打包成war包发布(亲测有效) - 第453篇》

《SpringBoot添加外部jar包及打包(亲测有效) - 第452篇》

更多@打包的知识,关注公众号「SpringBoot」回复关键词[453 | 452],查看文章。

二、配置外置Tomcat

一切都准备好,就可以配置外置的Tomcat,然后在开发工具中使用外置的Tomcat进行启动Spring Boot的应用。

2.1 Edit Configurations

选择Edit Configurations...

2.2在Run/Debug Configurations 对话框选择Tomcat

在Run/Debug Configurations 对话框选择Tomcat:

2.3在Run/Debug Configurations 对话框配置本地Tomcat

在Run/Debug Configurations 对话框配置本地Tomcat:

2.4在Run/Debug Configurations 对话框配置Deployment

在Run/Debug Configurations 对话框配置Deployment:

选择war包:

2.5在Run/Debug Configurations 对话框配置修改Application context

在Run/Debug Configurations 对话框配置修改Application context:

​点击OK,基本配置完成,在Idea的配置可以看到已经配置的Tomcat。

2.6启动Tomcat

注意,不能右键启动类ExampleApplication,执行启动。

正确如下:

选择已经配置的Tomcat,选择Run或者Debug运行即可,启动成功如下:

2.7测试

请求URL:http://localhost:8080/package-war-test/test1

三、外置jar无法访问

以为一切都很完美了,没想到有外置jar的方法的时候,直接报错了,目前找到的解决方案是,创建目录src/main/webapp/WEB-INF/lib/,将外置的jar放到这个目录下。

当然其它有引用的地方也需要相应修改下路径,修改maven-war-plugin的路径:

<plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-war-plugin</artifactId>    <version>3.3.2</version>    <configuration>        <failOnMissingWebXml>false</failOnMissingWebXml>        <webResources>            <webResource>                <directory>${pom.basedir}/src/main/webapp/WEB-INF/lib/</directory>                <targetPath>WEB-INF/lib/</targetPath>                <includes>                    <include>**/*.jar</include>                </includes>            </webResource>        </webResources>    </configuration></plugin>

不出意外的应该就可以正常的使用了,如果还不行的话,那么就再添加一个maven-compiler-plugin插件:

<!-- 设置javac编译器的版本和编码字符 --><plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-compiler-plugin</artifactId>    <configuration>        <source>${java.version}</source>        <target>${java.version}</target>        <encoding>utf8</encoding><!-- 编译器编码 -->        <compilerArguments>            <extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>        </compilerArguments>    </configuration></plugin>

在idea内启动tomcat,访问有外部jar调用的方法:

一切都是这么的美好。

至于为什么自己定义的/libs,不能被加载进来,这个问题目前还不清楚,有知道的可以留言告知下。

总结

总的来说,还是很简单的,主要是有些步骤不知道所以可能会采一些坑,但问题不大。

(1)下载外置Tomcat

(2)将Spring Boot项目配置以war的方式进行打包

(3)将外置的Tomcat添加到Idea中,然后将war添加到Tomcat容器。

(4)外置的jar不能识别的问题,就是将外置的jar放到一个固定的路径下,就能够被识别了。

\(^o^)/~你的小小鼓励,是博主坚持的动力,点个赞再走呗~

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

ShardingJDBC分库分表:http://t.cn/A6ZarrqS

分布式事务解决方案:http://t.cn/A6ZaBnIr

JVM内存模型调优实战:http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

大话设计模式之爱你:https://dwz.cn/wqO0MAy7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

评测5款国内外免费远控,谁是最好用第一名?

远程控制应用不少人都有了解使用过&#xff0c;尤其是会常用电脑进行工作的群体&#xff0c;比如程序员、设计师、运维、文员等岗位。在隔离居家远程办公时&#xff0c;通过家里的手机、平板或电脑跨系统、跨设备操控公司所用的办公电脑&#xff0c;就能及时处理工作内容&#…

前端使用lottie-web,使用AE到处的JSON动画贴心教程

Lottie简介 官方介绍&#xff1a;Lottie是一个库&#xff0c;可以解析使用AE制作的动画&#xff08;需要用bodymovie导出为json格式&#xff09;,支持web、ios、android、flutter和react native。 在web端&#xff0c;lottie-web库可以解析导出的动画json文件&#xff0c;并将其…

02_FreeRTOS移植

目录 获取FreeRTOS源码 FreeRTOS源码内容 FreeRTOS内核 Demo文件夹 Source文件夹 portable文件夹 FreeRTOS移植 移植步骤 移植详解 实验源码: 获取FreeRTOS源码 FreeRTOS官网:https://www.freertos.org/ FreeRTOS源码内容 FreeRTOS内核 Demo文件夹 Demo文件夹里面就…

《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享(15)

《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限&#xff0c;如果错误欢迎批评指正。 第四章&#xff1a;Protein Binding Leads to Biological Actions &#xff08;蛋白质的结合会产生生物作用&#xff09; 如果我们想要对一个结合过…

Java 泛型中的通配符详解

目录 1、如何定义和使用上界通配符&#xff1f; 2、如何定义和使用无界通配符&#xff1f; 3、如何定义和使用下界通配符&#xff1f; 4、如何使用通配符定义泛型类或接口之间的子类型关系&#xff1f; 5、通配符的捕获和辅助方法 6、通配符使用指南 在泛型代码中&#x…

C++ txt文本文件处理系统(c++学习小例子)

C++ txt文本文件处理系统(c++学习小例子) 一、界面示例二、 要求2.1 数据格式2.2 实现功能三、代码3.1 classfi.h3.2 classfi.cpp3.3 main.cpp四、 使用说明一、界面示例 二、 要求 2.1 数据格式 现有DEM数据,其格式为DEM_data.txt,可在文章末尾下载。文本存储格式如下: …

用javascript分类刷leetcode19.数组(图文视频讲解)

数组操作的时间复杂度 Access&#xff1a;O(1) Search&#xff1a;O(n) Insert&#xff1a; 平均O(n)&#xff0c;最好的情况下O(1)&#xff0c;也就是在数组尾部插入O(1)&#xff0c;最坏的情况下O(n) Delete&#xff1b;平均O(n)&#xff0c;最好的情况下O(1)&#xff0c;…

力扣刷题记录——367. 有效的完全平方数、383. 赎金信、387. 字符串中的第一个唯一字符、389. 找不同

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《367. 有效的完全平方数、383. 赎金信、387. 字符串中的第…

LightDB单机安装

LightDB单机安装 LightDB官网&#xff1a;https://www.hs.net/lightdb 下载安装包&#xff1a;lightdb-x-13.8-22.3-7953-el7.x86_64.zip 前置准备 防火墙配置(选择一种操作) firewall防火墙 firewall-cmd --permanent --add-port5432/tcp firewall-cmd --permanent --add-p…

(深度学习快速入门)第三章第三节2:深度学习必备组件之损失函数和激活函数

文章目录一&#xff1a;损失函数&#xff08;1&#xff09;均方误差损失&#xff08;MSE&#xff09;&#xff08;2&#xff09;交叉熵损失&#xff08;Cross Entropy&#xff09;二&#xff1a;激活函数&#xff08;1&#xff09;tanh&#xff08;2&#xff09;ReLU&#xff0…

SpringBoot数据响应与内容协商

目录 数据响应与内容协商 1、响应JSON 1.1、jackson.jarResponseBody 1.2、SpringMVC到底支持哪些返回值 2、内容协商 1、引入xml依赖 2、postman分别测试返回json和xml 3、开启浏览器参数方式内容协商功能 数据响应与内容协商 1、响应JSON 1.1、jackson.jarResponseBo…

区块链北大肖老师学习笔记6

第七节 比特币的挖矿难度调整 H(block header) < target 目标(target)预值越小&#xff0c;挖矿的难度越大。调整挖矿的难度就是调整目标空间在整个输出空间中所占的比例。 比特币用的哈希算法是SHA-256&#xff0c;这个产生的哈希值是256位。所以整个输出空间是2的256次…

[JavaEE]synchronized 与 死锁

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1.synchronized 的特性 2. synchronized 使用示例:…

new做了什么

function structure (name, age) {this.name namethis.age age}// 给构造函数--prototype加上一个方法structure.prototype.sayName function () {console.log(this.name, 调用打印);return this.name}structure.one 5const person new structure(张龙, 188)// 打印构造函…

【基础算法】前缀和 与 差分

前缀和 用来求解一段区间&#xff08;一维&#xff09;的总和 或者一块矩形区域&#xff08;二维&#xff09;的总和 一维前缀和 原数组a[N]&#xff0c;前缀和数组s[N]// ---读入数组a[N] // ---// 处理前缀和数组 s[N] s[0] 0; //定义在全局变量&#xff0c;不用写这一句 f…

SOA 和微服务有何区别?

玩过 Dubbo 的小伙伴应该都有听说过一个概念叫做 SOA&#xff0c;每当我们说起微服务的时候&#xff0c;很多人就会去纠结这和 SOA 有啥关系呀&#xff1f;感觉换汤不换药呀。 今天松哥来稍微和小伙伴们讨论下这个话题&#xff0c;我们一起来看看 SOA 和微服务到底有何异同。 …

c语言进阶(3)——指针进阶笔试题详解

1.指针和数组笔试题解析 关键&#xff1a;数组名在两种情况下是指整个数组&#xff1a; &#xff08;1&#xff09;sizeof&#xff08;数组名&#xff09;&#xff08;2&#xff09;&数组名 其它的情况下&#xff0c;都是代表数组的首元素地址。 例题 1 &#xff1a;一维…

【算法面试】算法在面试中考察的是什么(金三银四面试专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/Liunx内核/C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1f4…

Kafka消息中间件

Kafka消息中间件 同时市场上也发展处ActiveMq、RabbitMQ、Kafka、RocketMQ、Pulsar等众多优秀的框架&#xff1b;在大数据领域中Kafka目前是使用较多的框架。Kafka作为内部消息通知的框架&#xff0c;可以适应项目中大数据量的高吞吐、实时流计算等功能实现。 分布式消息中间…

【自学C++】C++整型

C整型 C整型教程 C 的整型用来存放整数 类型 的数字&#xff0c;即不可以带小数&#xff0c;C 整型可以分为短整型 short&#xff0c;整型 int&#xff0c;长整型 long 和 long long 类型。 C整型取值范围 数据类型取值范围字节数short-32768 ~ 327672int-2147483648 ~ 214…