解决Spring @Scheduled定时器同时执行两次的问题 Quartz同时执行2次的问题 亲测可靠

本文详细介绍了如何解决Spring Scheduler和Quartz定时器在Tomcat环境下重复执行两次的问题。通过调整Tomcat配置文件server.xml中的<Host>和<Context>元素,可以有效避免任务重复执行,降低服务器资源消耗。

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

解决Spring @Scheduled定时器同时执行两次的问题 Quartz同时执行2次的问题 亲测可靠

一、问题描述

1、使用Spring提供的定时任务 Scheduler,在Tomcat容器中启动后,发现同一个任务会重复执行两次的情况。对于定时计算的数据,造成大量的服务器资源占用,需要解决这个问题。

2、错误大概如下:

任务开始...

2019-10-08 17:07:24

任务结束 end...

任务开始...

2019-10-08 17:07:24

任务结束 end...

任务开始...

2019-10-08 17:07:26

任务结束 end...

任务开始...

2019-10-08 17:07:26

任务结束 end...

任务开始...

二、问题解决

1、在 Tomcat/conf/server.xml 文件中进行如下修改:

  • <Host> 元素中 appBase="webapps" , 修改为: appBase=""
  • <Host>元素下的 <Context>元素中 docBase=“projectName” , 修改为绝对路径:

docBase="E:\EclipseWorkspace\tomcat\webapps\projectName"

2、参考如下:

<Host appBase="" autoDeploy="true" name="localhost" unpackWARs="true">	
    <Context docBase="E:\EclipseWorkspace\tomcat7\webapps\projectName" path="" />
</Host>

3、修改配置后,即可解决。

三、总结

1、<Host>元素下的 <Context>元素配置作用是,消除项目名称,访问路径变成:http://localhost:999/

2、配置了 <Context>元素后,会导致 Spring Scheduler定时器重复执行两次的问题。

3、配置了<Context>元素后,相当于Tomcat里面加载了两个应用。加上 projectName的是 appBase 下面的应用 , 不加上projectName对应的是docBase下面的应用。

4、该操作同样适用于Quartz设置了autoStartup="true"后(<property name="autoStartup" value="true"/> ),会重复 执行两次的问题。 (Quartz用法Quartz和Spring整合集成

5、经过测试,当<Context>元素的 path="projectName"时,不会出现重复执行2次的问题。如下:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
    <Context docBase="project" path="/project" reloadable="false" />
</Host>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值