Spring定时器加载两次问题

在使用Spring进行定时任务时遇到任务每次执行两次的问题。排除了Spring与SpringMVC重复加载以及Tomcat配置错误的可能性。通过日志分析未发现Spring初始化重复,尝试使用线程锁和延迟执行未解决问题。最终发现是@Configuration与@Component注解导致类被加载两次,移除@Component后定时任务正常执行一次。解决方案是避免同时使用这两个注解。

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

修改前

在写定时任务前先写了个HelloWorld 来检测一下定时器能否正常运行,结果一检查发现 每次都会执行两次, 在网上查 有人说是因为spring和springmvc 加载了两次 也有人说是因为 Tomcat的配置不正确 我检查了下 我是直接起的dubbo 都没有用到 springmvc和 tomcat 所以肯定还有其他的原因.
我的代码

@Component
public class TimingTaskImpl implements TimingTaskApi {
    @Scheduled(cron = "0/5 * * * * ?")//每五秒执行一次
    @Override
    public  void HelloWorld() {
    	Date a = new Date();
    	System.out.println(Thread.currentThread().getName()+"----HelloWorld----"+a);
   }
}

配置文件:
在这里插入图片描述
在这里插入图片描述
后来我检查了很久, 看我的log日志检查spring有没有被初始化两遍 ,看了半天也看不出个所以然.后来我就想能不能用线程锁synchronized 把它给锁住 结果也没有用, 然后我用thread.sleep();方法也是什么用都没有 .
后来我把 @component 给删掉 看看 定时任务是否能够正常执行 ,发现 居然 定时器就执行了一次 .
我猜测 原因应该是 spring根据配置文件的

<task:annotation-driven scheduler="scheduler"/>

把 文件给加载了一次 然后 @component 又把文件给加载了一次 最后导致 定时器加载两次 .

所以解决办法就是 去掉 @component .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值