gpt4 book ai didi

spring - 为什么 Spring 不运行我的 @Scheduled 方法?

转载 作者:IT老高 更新时间:2023-10-28 13:47:30 25 4
gpt4 key购买 nike

我有点困惑,因为我正在尝试使用 @Scheduled 注释,但 Spring 似乎没有找到我的方法。最终结果是,我用 @Scheduled 注释的方法都没有被执行。

我通过以下声明调用了 Spring 的任务魔法:

<beans> <!-- XMLNS, XSD declarations omitted for brevity -->

<context:component-scan base-package="com.mypackage"/>

<task:executor id="executor" pool-size="5"/>
<task:scheduler id="scheduler" pool-size="5"/>
<task:annotation-driven scheduler="scheduler" executor="executor"/>

</beans>

我有一个看起来像这样的界面:

package com.mypackage;

public interface MyInterface {

public void executePeriodically();
}

对应的 impl 如下:

package com.mypackage.impl;
// imports omitted for brevity

@Service
public class MyInterfaceImpl implements MyInterface {

@Scheduled(cron = "0/5 * * * * ?")
public void executePeriodically() {
System.out.println("The time is now : " + new Date());
}
}

现在预期的结果是,我有一个非常吵闹的小家伙每 5 秒告诉我几点钟……但实际上我什么也得不到。我已经尝试在接口(interface)方法和 impl 方法上使用注释,但这似乎并没有改变任何东西。

我确定执行程序和调度程序正在初始化,因为我的日志中有以下内容:

INFO  - ThreadPoolTaskExecutor     - Initializing ExecutorService 
INFO - XmlWebApplicationContext - Bean 'executor' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO - XmlWebApplicationContext - Bean 'executor' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO - ThreadPoolTaskScheduler - Initializing ExecutorService 'scheduler'
INFO - XmlWebApplicationContext - Bean 'scheduler' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

我不确定关于不符合条件的那条线是否相关或红鲱鱼。

目前,我正在通过这样声明我的计划任务来解决它:

<task:scheduled-tasks>
<task:scheduled ref="sourceDocumentManagerImpl" method="deleteOldDocuments" cron="0 0 * * * ?"/>
</task:scheduled-tasks>

虽然这工作得很好,但我更愿意使用注释,因为直接在代码中查看该方法的期望值要方便得多。任何人都知道我可能做错了什么?作为记录,我使用的是 Spring 3.0.4

非常感谢!

最佳答案

添加“任务:注释驱动”?

<beans> <!-- XMLNS, XSD declarations omitted for brevity -->

<context:component-scan base-package="com.mypackage"/>
<task:annotation-driven/>
<task:executor id="executor" pool-size="5"/>
<task:scheduler id="scheduler" pool-size="5"/>
<task:annotation-driven scheduler="scheduler" executor="executor"/>

</beans>

引用 http://howtodoinjava.com/2013/04/23/4-ways-to-schedule-tasks-in-spring-3-scheduled-example/

注解驱动任务的Spring @Configuration(非xml配置)

只需在 WebMvcConfig 类上添加 @EnableScheduling

@Configuration
@EnableWebMvc
@EnableAsync
@EnableScheduling
public class WebMvcConfig extends WebMvcConfigurerAdapter {
/** Annotations config Stuff ... **/
}

引用 Spring Scheduler does not work

关于spring - 为什么 Spring 不运行我的 @Scheduled 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6154741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com