1. 概要

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

このクイックチュートリアルでは、Springスケジューリングアノテーションについて説明します。

2. @EnableAsync

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

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

@Configuration
@EnableAsync
class VehicleFactoryConfig {}

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

3. @EnableScheduling

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

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

@Configuration
@EnableScheduling
class VehicleFactoryConfig {}

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

4. @Async

別のスレッド実行するメソッドを定義できるため、それらを非同期で実行できます。

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

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

このアノテーションをクラスに適用すると、すべてのメソッドが非同期的に呼び出されます。

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

@Async の詳細については、この記事を参照してください。

5. @Scheduled

定期的にを実行するメソッドが必要な場合は、次のアノテーションを使用できます。

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

これを使用して、固定間隔でメソッドを実行することも、cronのような式で微調整することもできます。

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

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

@Scheduled で注釈が付けられたメソッドは、voidリターン型である必要があることに注意してください。

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

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

6. @Schedules

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

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

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

7. 結論

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

いつものように、例はGitHubから入手できます。