2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
En el desarrollo de software moderno, las tareas programadas son un componente clave de la automatización de aplicaciones y la eficiencia operativa. Ya sea que se trate de copias de seguridad de datos, verificación del estado del sistema, generación periódica de informes o procesos automatizados desencadenados por las actividades del usuario, las tareas programadas desempeñan un papel indispensable. Garantizan la continuidad de la lógica empresarial y las capacidades de automantenimiento del sistema.
En el modelo de desarrollo tradicional, la implementación de tareas programadas a menudo requiere confiar en las tareas programadas del sistema operativo (como el crontab de Linux) o escribir una lógica empresarial compleja. Estos métodos tienen muchos inconvenientes:
Como marco Java popular, Spring Boot proporciona una forma más elegante e integrada de implementar tareas programadas. Simplifica la configuración y proporciona API enriquecidas, lo que permite a los desarrolladores integrar rápidamente funciones de tareas programadas en las aplicaciones.
Arranque de primavera pasado@EnableScheduling
y@Scheduled
Las anotaciones hacen que sea extremadamente fácil escribir y configurar tareas programadas en aplicaciones Spring. Además, Spring Boot también proporciona integración con Spring Task Scheduler, que brinda soporte para requisitos de tareas programadas más avanzadas.
Spring Boot es desarrollado por el equipo de Pivotal (ahora parte de VMware) y es un marco de desarrollo e implementación rápido y modular basado en el marco Spring. Su objetivo es simplificar el proceso de configuración y desarrollo inicial de las aplicaciones Spring y reducir el trabajo de configuración de los desarrolladores al proporcionar una serie de configuraciones predeterminadas.
La aplicación Spring Boot se inicia a través deSpringApplication.run()
Método implementado, creará y configurará automáticamente el contexto de la aplicación Spring. Spring Boot también proporciona una interfaz de línea de comandos (CLI) y un punto final de Actuator para monitorear y administrar aplicaciones.
Arranque de primavera pasadospring-boot-starter-parent
Proporciona gestión de dependencias y simplifica la configuración de proyectos Maven y Gradle. Predefine los números de versión y los rangos de dependencia, lo que facilita la gestión de los conflictos de dependencia y el control de versiones.
Spring Boot tiene una comunidad activa de código abierto que proporciona una gran cantidad de complementos y "iniciadores" que contienen las dependencias necesarias para crear funciones específicas, comospring-boot-starter-web
Para crear aplicaciones RESTful.
A continuación se detallan los pasos para crear una aplicación Spring Boot simple y el código de muestra correspondiente:
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
El comando se ejecuta.Spring Boot no es un reemplazo de Spring Framework, sino un método de desarrollo rápido basado en Spring Framework. Proporciona una forma rápida de iniciar aplicaciones Spring mientras mantiene todas las características y flexibilidad de Spring Framework.
Spring Boot es un marco diseñado para el desarrollo Java moderno. Simplifica la configuración y proporciona una serie de funciones listas para usar, lo que permite a los desarrolladores centrarse en la implementación de la lógica empresarial en lugar de la construcción de infraestructura. En los siguientes capítulos, profundizaremos en la aplicación de Spring Boot en tareas programadas y mostraremos cómo usar sus funciones para crear tareas automatizadas eficientes y confiables.
Una tarea programada es un fragmento de código o programa que se ejecuta automáticamente en un momento predeterminado. Pueden ser únicos o periódicos y se utilizan para realizar tareas automatizadas como copia de seguridad de datos, envío de notificaciones, realización de comprobaciones programadas, etc.
Las tareas programadas son fundamentales para mantener su sistema en funcionamiento y automatizar los procesos comerciales. Pueden reducir la intervención manual, aumentar la eficiencia y garantizar la puntualidad y precisión de las tareas.
java.util.Timer
。@Scheduled
。java.util.Timer
Implementar tareas programadasA continuación se muestra un ejemplo utilizando la biblioteca estándar de Java.Timer
Ejemplo de una tarea programada simple implementada por clase:
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);
}
}
Las expresiones cron son una forma poderosa de configurar el tiempo de ejecución de tareas programadas. El siguiente es un ejemplo de una expresión cron para ejecutar una tarea todos los días a la 1 am:
0 0 1 * * ?
Arranque de primavera pasado@Scheduled
Las anotaciones simplifican la configuración y la implementación de tareas programadas.Aquí hay un uso@Scheduled
Ejemplo de tarea programada de Spring Boot anotada:
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
anotación@Scheduled
Es una anotación proporcionada por Spring para simplificar la implementación de tareas programadas. Le permite crear métodos ejecutados periódicamente mediante una configuración de anotaciones simple.
@Scheduled
Configuración de anotacionesfixedRate
: Especifique el intervalo de tiempo fijo (en milisegundos) entre dos ejecuciones de tareas.fixedDelay
: Especifique un intervalo de tiempo fijo entre el final de la ejecución de la última tarea y el inicio de la siguiente tarea.initialDelay
: Especifique el tiempo de demora antes de que se ejecute la tarea por primera vez.cron
: utilice expresiones cron para especificar el cronograma de ejecución de la tarea.fixedRate
El siguiente ejemplo muestra un método que se ejecuta cada 5 segundos:
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
El siguiente ejemplo muestra un método que se ejecuta 1 segundo después de que la tarea anterior haya terminado de ejecutarse:
@Scheduled(fixedDelay = 1000)
public void taskWithFixedDelay() {
System.out.println("任务执行:" LocalDateTime.now());
}
initialDelay
El siguiente ejemplo muestra un método que se ejecuta primero 10 segundos después de que se inicia la aplicación y luego cada 5 segundos:
@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void taskWithInitialDelay() {
System.out.println("任务执行:" LocalDateTime.now());
}
Las expresiones cron proporcionan configuraciones de tiempo más complejas, lo que le permite especificar tiempos de ejecución específicos. El siguiente ejemplo muestra un método que se ejecuta todos los días a la 1 am:
@Scheduled(cron = "0 0 1 * * ?")
public void taskWithCronExpression() {
System.out.println("任务执行:" LocalDateTime.now());
}
Las tareas programadas pueden generar excepciones, proporciona Spring@Async
anotación para realizar tareas de forma asincrónica y utilizar@ExceptionHandler
para manejar excepciones.
@Async
@Scheduled(cron = "0 0/30 * * * ?")
public void taskWithExceptionHandling() {
if (Math.random()