2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
В современной разработке программного обеспечения запланированные задачи являются ключевым компонентом автоматизации приложений и эффективности работы. Будь то резервное копирование данных, проверка работоспособности системы, регулярное создание отчетов или автоматизированные процессы, запускаемые действиями пользователя, запланированные задачи играют незаменимую роль. Они обеспечивают непрерывность бизнес-логики и возможности самообслуживания системы.
В традиционной модели разработки реализация запланированных задач часто требует использования запланированных задач операционной системы (например, crontab Linux) или написания сложной бизнес-логики. Эти методы имеют множество неудобств:
Spring Boot, популярная платформа Java, обеспечивает более элегантный и интегрированный способ реализации запланированных задач. Он упрощает настройку и предоставляет богатые API-интерфейсы, позволяя разработчикам быстро интегрировать функции запланированных задач в приложения.
Весенняя загрузка пройдена@EnableScheduling
и@Scheduled
Аннотации упрощают написание и настройку запланированных задач в приложениях Spring. Кроме того, Spring Boot также обеспечивает интеграцию с планировщиком задач Spring, который обеспечивает поддержку более сложных требований к запланированным задачам.
Spring Boot разработан командой Pivotal (теперь часть VMware) и представляет собой модульную среду быстрой разработки и развертывания, основанную на среде Spring. Его цель — упростить первоначальную настройку и процесс разработки приложений Spring, а также сократить работу разработчиков по настройке за счет предоставления ряда конфигураций по умолчанию.
Приложение Spring Boot запускается черезSpringApplication.run()
Метод реализован, он автоматически создаст и настроит контекст приложения Spring. Spring Boot также предоставляет интерфейс командной строки (CLI) и конечную точку Actuator для мониторинга приложений и управления ими.
Весенняя загрузка пройденаspring-boot-starter-parent
Обеспечивает управление зависимостями и упрощает настройку проектов Maven и Gradle. Он заранее определяет номера версий и диапазоны зависимостей, что упрощает управление конфликтами зависимостей и контролем версий.
Spring Boot имеет активное сообщество с открытым исходным кодом, которое предоставляет большое количество плагинов и «стартеров», содержащих зависимости, необходимые для создания определенных функций, таких какspring-boot-starter-web
Для создания RESTful-приложений.
Ниже приведены шаги по созданию простого приложения Spring Boot и соответствующий пример кода:
spring-boot-starter-web
。import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@GetMapping("/")
public String home() {
return "Hello, Spring Boot!";
}
}
java -jar
Команда выполняется.Spring Boot — это не замена Spring Framework, а метод быстрой разработки на основе Spring Framework. Он обеспечивает быстрый способ запуска приложений Spring, сохраняя при этом все функции и гибкость Spring Framework.
Spring Boot — это среда, предназначенная для современной разработки на Java. Она упрощает настройку и предоставляет ряд готовых функций, позволяющих разработчикам сосредоточиться на реализации бизнес-логики, а не на построении инфраструктуры. В следующих главах мы углубимся в применение Spring Boot в запланированных задачах и покажем, как использовать его функции для создания эффективных и надежных автоматизированных задач.
Запланированная задача — это фрагмент кода или программы, который выполняется автоматически в заранее определенное время. Они могут быть разовыми или периодическими и используются для выполнения автоматизированных задач, таких как резервное копирование данных, отправка уведомлений, выполнение плановых проверок и т. д.
Запланированные задачи имеют решающее значение для поддержания работоспособности вашей системы и автоматизации бизнес-процессов. Они могут сократить количество ручного вмешательства, повысить эффективность и обеспечить своевременность и точность выполнения задач.
java.util.Timer
。@Scheduled
。java.util.Timer
Выполнять запланированные задачиВот пример использования стандартной библиотеки JavaTimer
Пример простой запланированной задачи, реализованной классом:
import java.util.Timer;
import java.util.TimerTask;
public class SimpleTimerTask {
public static void main(String[] args) {
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("执行定时任务:" System.currentTimeMillis());
}
};
Timer timer = new Timer();
long delay = 0;
long intervalPeriod = 1000; // 间隔1秒执行一次
timer.scheduleAtFixedRate(task, delay, intervalPeriod);
}
}
Выражения Cron — это мощный способ настроить время выполнения запланированных задач. Ниже приведен пример выражения cron для выполнения задачи каждый день в час ночи:
0 0 1 * * ?
Весенняя загрузка пройдена@Scheduled
Аннотации упрощают настройку и реализацию запланированных задач.Вот использование@Scheduled
Пример запланированного задания с аннотациями Spring Boot:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(fixedRate = 5000) // 每5秒执行一次
public void reportCurrentTime() {
System.out.println("当前时间:" System.currentTimeMillis());
}
@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行
public void scheduleTask() {
System.out.println("执行定时任务:" System.currentTimeMillis());
}
}
@Scheduled
аннотация@Scheduled
Это аннотация, предоставляемая Spring для упрощения реализации запланированных задач. Он позволяет создавать периодически выполняемые методы посредством простой настройки аннотаций.
@Scheduled
Конфигурация аннотацийfixedRate
: укажите фиксированный интервал времени (в миллисекундах) между выполнением двух задач.fixedDelay
: укажите фиксированный интервал времени между окончанием выполнения последней задачи и началом следующей задачи.initialDelay
: укажите время задержки перед первым выполнением задачи.cron
: используйте выражения cron, чтобы указать расписание выполнения задач.fixedRate
В следующем примере показан метод, который выполняется каждые 5 секунд:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class FixedRateTask {
@Scheduled(fixedRate = 5000)
public void taskWithFixedRate() {
System.out.println("任务执行:" LocalDateTime.now());
}
}
fixedDelay
В следующем примере показан метод, который выполняется через 1 секунду после завершения выполнения предыдущей задачи:
@Scheduled(fixedDelay = 1000)
public void taskWithFixedDelay() {
System.out.println("任务执行:" LocalDateTime.now());
}
initialDelay
В следующем примере показан метод, который выполняется сначала через 10 секунд после запуска приложения, а затем каждые 5 секунд:
@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void taskWithInitialDelay() {
System.out.println("任务执行:" LocalDateTime.now());
}
Выражения Cron предоставляют более сложные настройки времени, позволяя указать конкретное время выполнения. В следующем примере показан метод, который выполняется каждый день в час ночи:
@Scheduled(cron = "0 0 1 * * ?")
public void taskWithCronExpression() {
System.out.println("任务执行:" LocalDateTime.now());
}
Запланированные задачи могут вызывать исключения, предоставляет Spring@Async
аннотацию для асинхронного выполнения задач и использования@ExceptionHandler
для обработки исключений.
@Async
@Scheduled(cron = "0 0/30 * * * ?")
public void taskWithExceptionHandling() {
if (Math.random()