2016-12-06 27 views
3

Spring Webアプリケーションでは、XMLベースの設定から注釈ベースの設定に移行しています。Springからスケジュールされたタスク:XMLから注釈へ

は、私たちのWebアプリケーションで複数のスケジューラがあり

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

このXMLで定義されたスケジュールされたタスクとこだわっています。このタスクは、IDがcacheSchedulerのスケジューラで実行する必要があります。

私はこれがデフォルトのスケジューラ上で実行されている

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

場所に、今、次の注釈を持っています。

これはXML設定なしでどのように修正できますか?

答えて

4

@Scheduledで直接行うことはできません。 Bean参照名を指定する注釈メンバは提供されません。

代わりにSchedulingConfigurerを使用する必要があります。 @Configurationクラスを定義します。 @Scheduled注釈付きメソッドを持つコンポーネントタイプのパッケージの場合は、@EnableScheduling@ComponentScanと注釈を付けます。次に、クラスにSchedulingConfigurerを実装させます。

ScheduledTaskRegistrarconfigureTasksメソッドでは、タスクスケジューラを設定できます。例えば

:この@Configurationクラスで発見

@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方法は今TaskScheduler内で定義され使用されます。

異なるTaskSchedulerインスタンスを使用するために異なる@Scheduledメソッドが必要な場合は、異なる<task:scheduled-tasks .../>エレメントを必要とするのと同じように、異なる@Configurationクラスが必要です。

関連する問題