[我期望@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
您可以延迟计划的初始运行并更改为每2分钟运行一次
@Scheduled(fixedDelay = 120000, initialDelay = 3000)