Spring的定时任务在应用启动时不会开始执行。

10 浏览
0 Comments

Spring的定时任务在应用启动时不会开始执行。

我在我的应用程序中有一个使用CRON设置的@Scheduled任务,每4个小时运行一次。我面临的问题是,CRON作业在应用程序启动后并不立即开始,而是在应用程序启动后的4个小时开始。\n我尝试在任务中使用@PostConstruct方法来调用它,但由于未初始化的Spring上下文而导致错误。\n请告诉我如何在应用程序部署后立即运行定时任务,然后在每次部署后的4个小时运行一次。\n编辑:\n我不会使用@PostConstruct,因为我的定时方法依赖于其他尚未初始化的Bean,原因未知。

0
0 Comments

Spring Scheduled任务在应用启动时不启动的原因是因为默认情况下,Spring只在容器启动之后开始执行定时任务。解决方法是使用ApplicationListener,在应用启动完成后手动触发定时任务。

首先,需要创建一个实现ApplicationListener接口的类,例如ApplicationReadyListener。在该类的onApplicationEvent方法中调用你想要执行的定时任务的方法。

import org.springframework.context.ApplicationListener;
import org.springframework.boot.context.event.ApplicationReadyEvent;
public class ApplicationReadyListener implements ApplicationListener {
    public void onApplicationEvent(ApplicationReadyEvent event) {
        // 调用你的定时任务方法
    }
}

然后,在你的Spring配置文件中将这个监听器注册为一个bean。


这样,在应用启动完成后,定时任务就会被触发执行。同时,你也可以在每个月的第一天通过cron表达式来触发定时任务。

0
0 Comments

问题原因:定时任务的时间设置不正确,导致任务没有在应用启动时开始执行。

解决方法:根据需求,可以使用initialDelay和fixedRate或fixedRateString来设置任务的初始延迟和执行频率。如果担心硬编码的值,可以将配置值传递给fixedRateString。另外,对于这种情况,使用cron表达式更加合适,可以提供更详细的时间配置。

0
0 Comments

问题:Spring定时任务在应用程序启动时不启动的原因以及解决方法

原因:我在应用程序配置中没有添加@EnableScheduling注解。即使在我的定时任务类中设置了(fixedDelay=5000),定时任务仍然不起作用。

解决方法:我在定时任务类中添加了@EnableScheduling注解,然后一切都正常工作了。谢谢,很容易忽略定时方法应该被扫描的这一点。

0