2016-12-06 120 views
3

在我們的Spring Web應用程序中,我們正在從基於XML的配置轉換爲基於Annotation的配置。春季計劃任務:從XML到註釋

我堅持用這個XML

<task:scheduled-tasks scheduler="cacheScheduler"> 
    <task:scheduled ref="currencyExchangeRateTask" method="cacheCurrencyExchangeRates" cron="0 0 8,20 * * *" /> 
</task:scheduled-tasks> 

有在我們的網頁應用程序的多個調度定義的計劃任務。此任務需要在編號爲cacheScheduler的調度程序上執行。

我現在下面的註釋到位

@Scheduled(cron = "0 0 8,20 * * *") 
public void cacheCurrencyExchangeRates() { 
    ... 
} 

這是默認的調度執行。

如何在沒有XML配置的情況下解決這個問題?

回答

4

你不能直接通過@Scheduled來完成。它不提供任何註釋成員來指定bean引用名稱。您需要使用SchedulingConfigurer。定義一個@Configuration類。用@EnableScheduling@ComponentScan對包含@Scheduled帶註釋方法的組件類型的包進行註釋。然後讓班級執行SchedulingConfigurer

通過configureTasks方法提供的ScheduledTaskRegistrar可讓您設置任務調度程序。現在將使用中的TaskScheduler定義

@Configuration 
@ComponentScan("com.example.tasks") 
@EnableScheduling 
class Tasks implements SchedulingConfigurer { 
    @Bean 
    public TaskScheduler cacheScheduler() { 
     return new ThreadPoolTaskScheduler(); 
    } 

    @Override 
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { 
     taskRegistrar.setTaskScheduler(cacheScheduler()); 
    } 
} 

所有@Scheduled通過這個@Configuration類發現方法:

例如。

如果你需要不同的方法@Scheduled使用不同TaskScheduler情況下,你需要不同的@Configuration類,同樣需要不同<task:scheduled-tasks .../>元素。