2 回答

TA貢獻(xiàn)1827條經(jīng)驗 獲得超4個贊
注釋被認(rèn)為是代碼的元數(shù)據(jù)。您不應(yīng)該與注釋交互 - 只有提供庫應(yīng)該。但只需將感興趣的 cron 表達(dá)式外部化并在其他地方閱讀即可。
@Scheduled(cron = "${yourConfiguration.cronExpression}")
someMethod()...
@Value("${yourConfiguration.cronExpression}")
String cronExpression; // injected for debugging purposes
您還可以獲取 TaskScheduler 并使其列出所有任務(wù),包括所有 cron 表達(dá)式。但這將超出您所討論方法的范圍。

TA貢獻(xiàn)1155條經(jīng)驗 獲得超0個贊
從 Spring 5.0.2開始,它允許在運(yùn)行時獲取調(diào)度任務(wù)信息:
我目前將其作為 ScheduledAnnotationBeanPostProcessor 上的 Set getScheduledTasks() 方法,ScheduledTask 現(xiàn)在公開了一個 Task getTask() 方法。然后您可以檢查任務(wù)的類型,為了更容易發(fā)現(xiàn),我還引入了特定的 FixedRateTask 和 FixedDelayTask 子類,然后您可以在 CronTask 旁邊檢查它們,不需要任務(wù)實例本身之外的任何額外元數(shù)據(jù)。
我再過一遍;今晚承諾。
ScheduledTask都存儲在beanScheduledAnnotationBeanPostProcessor中。您可以從此 bean 獲取它們并將其轉(zhuǎn)換為CronTask以獲取 cron 表達(dá)式:
@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
}
}
}
添加回答
舉報