第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Spring 運(yùn)行時獲取使用 @schedule 注釋的方法的 cron 注釋?

如何在 Spring 運(yùn)行時獲取使用 @schedule 注釋的方法的 cron 注釋?

回首憶惘然 2022-05-25 15:36:43
我有一個使用的 Spring 應(yīng)用程序@SpringBootApplication和@EnableScheduling在主java中。它還有一個包含多個 @Scheduled 方法的類:@Componentpublic class ScheduledTasks {(...)@Scheduled(cron = "0 0/5 10-18 ? * *")    public void doThings() {(...)}@Scheduled(cron = "0 0/22 23 ? * *")    public void doAnotherThings() {(...)}據(jù)我所知,它沒有聲明任何特殊的線程池、ThreadPoolExecutor 或類似的東西。該應(yīng)用程序運(yùn)行正常,計劃的作業(yè)運(yùn)行正常。我想在運(yùn)行時獲取 @Scheduled 注釋的值,只是想知道 cron 何時定義并向用戶顯示信息。無需向調(diào)度程序更改或添加新任務(wù)/作業(yè)。我一直在嘗試這個答案 中的一些想法 Spring <task:scheduled> 對象在運(yùn)行時是如何表示的? 嘗試獲取自動裝配的 ThreadPoolExecutor 或 ThreadPoolTaskExecutor,然后嘗試查看該對象的字段是否具有有用的信息,但使用 Autowired 獲取它們總是在應(yīng)用程序啟動時失敗。我的應(yīng)用程序在啟動“沒有找到用于計劃處理的 TaskScheduler/ScheduledExecutorService bean”時還說,所以我想它使用默認(rèn)/簡單的方式來運(yùn)行計劃的方法,它們工作正常。我不知道是否有必要在 @Configuration 類中手動創(chuàng)建帶有該對象的 @Bean 以自省它,或者如何填充與它們關(guān)聯(lián)的構(gòu)造函數(shù)。哪些對象具有與計劃作業(yè)相關(guān)的信息?我可以在自己的課堂上自動連接它以獲取信息嗎?是否需要在 Spring 中使用 @Bean 手動創(chuàng)建它?如何?
查看完整描述

2 回答

?
GCT1015

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á)式。但這將超出您所討論方法的范圍。


查看完整回答
反對 回復(fù) 2022-05-25
?
白衣非少年

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

          }

   }

}


查看完整回答
反對 回復(fù) 2022-05-25
  • 2 回答
  • 0 關(guān)注
  • 109 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號