«1. Обзор

Когда однопоточного выполнения недостаточно, мы можем использовать аннотации из пакета org.springframework.scheduling.annotation.

В этом кратком руководстве мы рассмотрим аннотации Spring Scheduling.

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.

Next »

Spring Data Annotations

« Previous

Spring Boot Annotations