动态不是 运行 @Scheduled 作业基于 Spring Boot 中 bean 的当前状态

Dynamically not running @Scheduled jobs based on current state of a bean in Spring Boot

我需要 runnning/not 运行 一个基于布尔值的 @Scheduled 作业,该布尔值在 bean 内部动态计算(周期性地并且通过 @Scheduled bean 读取文件并检查其内容)。我花了很多时间思考和谷歌搜索,直到现在才想出解决方案。

有人有好主意吗?

谢谢!

您可以通过编程方式启动和停止调度程序。

ScheduledFuture<?> scheduledFuture = taskScheduler.schedule(<runnable>, <interval>);  

然后你可以检查条件,如果它应该 运行 安排(或让它 运行)或者如果它不应该 运行 你取消它:

scheduledFuture.cancel(true);

我用 Aspect @Around Spring 的 @Scheduled 注释解决了它,然后没有调用 proceedingJoinPoint.proceed():

@Around("@annotation(org.springframework.scheduling.annotation.Scheduled)")

处理 Shedlock 不像 'easy' 但我能够用这个 @Around 停止执行然后返回 Optional.empty() (假装 Shedlock 无法获得锁):

@Around("execution(* net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider.lock(..)) "
    + "|| execution(* net.javacrumbs.shedlock.core.LockProvider.lock(..))")