«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.