2 回答
TA贡献1827条经验 获得超4个赞
注释被认为是代码的元数据。您不应该与注释交互 - 只有提供库应该。但只需将感兴趣的 cron 表达式外部化并在其他地方阅读即可。
@Scheduled(cron = "${yourConfiguration.cronExpression}")
someMethod()...
@Value("${yourConfiguration.cronExpression}")
String cronExpression; // injected for debugging purposes
您还可以获取 TaskScheduler 并使其列出所有任务,包括所有 cron 表达式。但这将超出您所讨论方法的范围。
TA贡献1155条经验 获得超0个赞
从 Spring 5.0.2开始,它允许在运行时获取调度任务信息:
我目前将其作为 ScheduledAnnotationBeanPostProcessor 上的 Set getScheduledTasks() 方法,ScheduledTask 现在公开了一个 Task getTask() 方法。然后您可以检查任务的类型,为了更容易发现,我还引入了特定的 FixedRateTask 和 FixedDelayTask 子类,然后您可以在 CronTask 旁边检查它们,不需要任务实例本身之外的任何额外元数据。
我再过一遍;今晚承诺。
ScheduledTask都存储在beanScheduledAnnotationBeanPostProcessor中。您可以从此 bean 获取它们并将其转换为CronTask以获取 cron 表达式:
@Component
public class SchedulederInfo {
@Autowired
private ScheduledAnnotationBeanPostProcessor scheduledBpp;
public void printInfo(){
for(ScheduledTask task : scheduledBpp.getScheduledTasks()) {
Task t = task.getTask();
if(t instanceof CronTask) {
CronTask cronTask = (CronTask)t;
System.out.println(cronTask.getRunnable()); //print the schedule method name
System.out.println(cronTask.getExpression()); //print the cron expression
}
}
}
添加回答
举报