Spring Boot:@Scheduled具有Cron定义将在应用程序启动后直接启动

问题描述 投票:0回答:1

[我期望@Scheduled"0 */2 * * * ?"注释中的cron表达式将准确地每2分钟(±毫秒)运行一次。我实际上@Scheduled语句在Spring自动装配完成后直接在应用程序启动时运行一次。如何在应用程序启动后将Spring配置为不运行@Scheduled。作为解决方法,我使用了布尔值private boolean isInit = true;,但是没有Spring正确地执行操作会很尴尬。

我正在使用Spring Boot:2.2.4-RELEASE

代码段:

@Component
public class TestScheduler {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Scheduled(cron = "0 */2 * * * ?")
    public void run() {
        logger.info("TestScheduler run");
    }
}

日志输出:

2020-02-04 17:27:45.553  INFO 25868 --- [  restartedMain] d.d.d.t.s.TestApplication                : Starting TestApplication [...]
[...]
2020-02-04 17:27:52.261  INFO 25868 --- [  restartedMain] d.d.d.t.s.runner.TestScheduler           : TestScheduler run
[...]
2020-02-04 17:28:00.002  INFO 25868 --- [   scheduling-1] d.d.d.t.s.runner.TestScheduler           : TestScheduler run
[...]
2020-02-04 17:30:00.002  INFO 25868 --- [   scheduling-1] d.d.d.t.s.runner.TestScheduler           : TestScheduler run

java spring spring-boot spring-scheduled
1个回答
0
投票

您可以延迟计划的初始运行并更改为每2分钟运行一次

 @Scheduled(fixedDelay = 120000, initialDelay = 3000)
© www.soinside.com 2019 - 2024. All rights reserved.