春のスケジュールアノテーション

Spring Scheduling Annotations

1. 概要

シングルスレッドの実行では不十分な場合は、org.springframework.scheduling.annotationパッケージのアノテーションを使用できます。

このクイックチュートリアルでは、Spring SchedulingAnnotationsについて説明します。

2. @EnableAsync

このアノテーションにより、Springで非同期機能を有効にできます。

@Configurationで使用する必要があります。

@Configuration
@EnableAsync
class VehicleFactoryConfig {}

非同期呼び出しを有効にしたので、@Asyncを使用してそれをサポートするメソッドを定義できます。

3. @EnableScheduling

このアノテーションを使用すると、アプリケーションでスケジューリングを有効にできます。

また、@Configurationと組み合わせて使用​​する必要があります。

@Configuration
@EnableScheduling
class VehicleFactoryConfig {}

その結果、@Scheduledを使用してメソッドを定期的に実行できるようになりました。

4. @Async

execute on a different threadにするメソッドを定義できるため、非同期で実行できます。

これを実現するために、メソッドに@Asyncアノテーションを付けることができます。

@Async
void repairCar() {
    // ...
}

この注釈をクラスに適用すると、すべてのメソッドが非同期に呼び出されます。

@EnableAsyncまたはXML構成を使用して、このアノテーションの非同期呼び出しを機能させる必要があることに注意してください。

@Asyncの詳細については、this articleを参照してください。

5. @Scheduled

execute periodicallyのメソッドが必要な場合は、次のアノテーションを使用できます。

@Scheduled(fixedRate = 10000)
void checkVehicle() {
    // ...
}

これを使用してfixed intervalsでメソッドを実行するか、cron-like expressionsで微調整することができます。

@Scheduledは、Java 8の繰り返しアノテーション機能を利用します。つまり、メソッドに複数回マークを付けることができます。

@Scheduled(fixedRate = 10000)
@Scheduled(cron = "0 * * * * MON-FRI")
void checkVehicle() {
    // ...
}

@Scheduledアノテーションが付けられたメソッドは、voidの戻り値の型を持つ必要があることに注意してください。

さらに、たとえば@EnableSchedulingまたはXML構成で機能するように、この注釈のスケジューリングを有効にする必要があります。

スケジューリングの詳細については、this articleをお読みください。

6. @Schedules

このアノテーションを使用して、複数の@Scheduledルールを指定できます。

@Schedules({
  @Scheduled(fixedRate = 10000),
  @Scheduled(cron = "0 * * * * MON-FRI")
})
void checkVehicle() {
    // ...
}

Java 8以降では、上記のようにアノテーションの繰り返し機能を使用して同じことを実現できることに注意してください。

7. 結論

この記事では、最も一般的なSpringスケジューリングアノテーションの概要を見ました。

いつものように、例は利用可能なover on GitHubです。