SpringBoot的定时器打包到外部tomcat执行两次

本文介绍了SpringBoot的定时任务在打包到外部Tomcat运行时出现执行两次的问题及其解决方法。问题源于启动时SpringBoot的二进制文件被加载两次。通过修改pom.xml排除内置Tomcat依赖并引入HttpServlet和WebSocket的provider范围依赖,解决了该问题。此外,对于本地开发环境,还需处理内置服务器的依赖排除,确保上线时恢复避免影响定时任务执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       最近的项目中需要定时器来完成定时任务,随手就写了一个。然后就没有管了,后来调一个东西,追踪tomcat的日志,心血来潮正好看看定时任务的效果,一看不得了。自己的定时任务竟然执行了两次,虽然对自己的功能无伤大雅,但作为一个写程序的,怎么能容忍。就各种查资料,一看,恩!好多人和我一样。不过看了几眼便索然无味。全是appBase和docBase的问题。关键是我的汤姆猫没有设置这些东西。话不多说,立即测试测试。

首先我们来一个测试的定时器:

@Component
@Configurable
@EnableScheduling
public class TestTimer {
    @Scheduled(cron = "0/3 * * * * ?")
    public void deadline() {
        System.out.println("开始执行测试任务===========================================");
    }
}

先放到本地进行测试,没问题啊,只执行一次。OK,线上的是tomcat,下载个tomcat然后放入tomcat,运行…
我的天,竟然一次运行两次,反复观察,最终确认。我们在启动的时候,springboot的二进制图片出现了两次,我们可以确定有可能我们是出现了重复唤醒汤姆猫造成的。

OK,我们在我们的pom文件去除我们养的汤姆猫:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions&g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值