2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
No desenvolvimento de software moderno, as tarefas agendadas são um componente chave da automação de aplicativos e da eficiência operacional. Quer se trate de backup de dados, verificação da integridade do sistema, geração regular de relatórios ou processos automatizados acionados por atividades do usuário, as tarefas agendadas desempenham um papel indispensável. Eles garantem a continuidade da lógica de negócios e as capacidades de automanutenção do sistema.
No modelo de desenvolvimento tradicional, a implementação de tarefas agendadas geralmente requer a dependência das tarefas agendadas do sistema operacional (como o crontab do Linux) ou a escrita de lógica de negócios complexa. Esses métodos têm muitos inconvenientes:
Como uma estrutura Java popular, o Spring Boot oferece uma maneira mais elegante e integrada de implementar tarefas agendadas. Ele simplifica a configuração e fornece APIs avançadas, permitindo que os desenvolvedores integrem rapidamente funções de tarefas agendadas aos aplicativos.
Spring Boot aprovado@EnableScheduling
e@Scheduled
As anotações tornam extremamente fácil escrever e configurar tarefas agendadas em aplicativos Spring. Além disso, o Spring Boot também oferece integração com o Spring Task Scheduler, que fornece suporte para requisitos de tarefas agendadas mais avançados.
Spring Boot é desenvolvido pela equipe Pivotal (agora parte da VMware) e é uma estrutura modular e rápida de desenvolvimento e implantação baseada na estrutura Spring. Seu objetivo é simplificar a configuração inicial e o processo de desenvolvimento de aplicativos Spring e reduzir o trabalho de configuração dos desenvolvedores, fornecendo uma série de configurações padrão.
O aplicativo Spring Boot é iniciado atravésSpringApplication.run()
Método implementado, ele criará e configurará automaticamente o contexto da aplicação Spring. Spring Boot também fornece uma interface de linha de comando (CLI) e um endpoint do atuador para monitorar e gerenciar aplicativos.
Spring Boot aprovadospring-boot-starter-parent
Fornece gerenciamento de dependências e simplifica a configuração de projetos Maven e Gradle. Ele predefine números de versão e intervalos de dependência, facilitando o gerenciamento de conflitos de dependência e controle de versão.
Spring Boot possui uma comunidade ativa de código aberto que fornece um grande número de plug-ins e "Starters" que contêm as dependências necessárias para construir funcionalidades específicas, comospring-boot-starter-web
Para construir aplicativos RESTful.
Abaixo estão as etapas para criar um aplicativo Spring Boot simples e o código de exemplo correspondente:
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
O comando é executado.Spring Boot não é um substituto do Spring Framework, mas um método de desenvolvimento rápido baseado no Spring Framework. Ele fornece uma maneira rápida de iniciar aplicativos Spring, mantendo todos os recursos e flexibilidade do Spring Framework.
Spring Boot é uma estrutura projetada para desenvolvimento Java moderno. Ele simplifica a configuração e fornece uma série de funções prontas para uso, permitindo que os desenvolvedores se concentrem na implementação da lógica de negócios em vez da construção de infraestrutura. Nos capítulos seguintes, nos aprofundaremos na aplicação do Spring Boot em tarefas agendadas e mostraremos como usar seus recursos para construir tarefas automatizadas eficientes e confiáveis.
Uma tarefa agendada é um trecho de código ou programa executado automaticamente em um horário predeterminado. Eles podem ser únicos ou periódicos e são usados para realizar tarefas automatizadas, como backup de dados, envio de notificações, realização de verificações agendadas, etc.
As tarefas agendadas são essenciais para manter o sistema em funcionamento e automatizar os processos de negócios. Eles podem reduzir a intervenção manual, aumentar a eficiência e garantir a pontualidade e a precisão das tarefas.
java.util.Timer
。@Scheduled
。java.util.Timer
Implementar tarefas agendadasAqui está um exemplo usando a biblioteca padrão JavaTimer
Exemplo de tarefa agendada simples implementada por classe:
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);
}
}
As expressões cron são uma forma poderosa de configurar o tempo de execução de tarefas agendadas. A seguir está um exemplo de uma expressão cron para executar uma tarefa todos os dias à 1h:
0 0 1 * * ?
Spring Boot aprovado@Scheduled
As anotações simplificam a configuração e implementação de tarefas agendadas.Aqui está um uso@Scheduled
Exemplo anotado de tarefa agendada do 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
anotação@Scheduled
É uma anotação fornecida pelo Spring para simplificar a implementação de tarefas agendadas. Ele permite criar métodos executados periodicamente por meio de configuração simples de anotações.
@Scheduled
Configuração de anotaçãofixedRate
: especifique o intervalo de tempo fixo (em milissegundos) entre duas execuções de tarefas.fixedDelay
: especifique um intervalo de tempo fixo entre o final da execução da última tarefa e o início da próxima tarefa.initialDelay
: Especifique o tempo de atraso antes que a tarefa seja executada pela primeira vez.cron
: use expressões cron para especificar o agendamento para execução da tarefa.fixedRate
O exemplo a seguir mostra um método que é executado a 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
O exemplo a seguir mostra um método que é executado 1 segundo após o término da execução da tarefa anterior:
@Scheduled(fixedDelay = 1000)
public void taskWithFixedDelay() {
System.out.println("任务执行:" LocalDateTime.now());
}
initialDelay
O exemplo a seguir mostra um método que é executado primeiro 10 segundos após o início do aplicativo e depois a cada 5 segundos:
@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void taskWithInitialDelay() {
System.out.println("任务执行:" LocalDateTime.now());
}
As expressões Cron fornecem configurações de tempo mais complexas, permitindo especificar tempos de execução específicos. O exemplo a seguir mostra um método que é executado todos os dias à 1h:
@Scheduled(cron = "0 0 1 * * ?")
public void taskWithCronExpression() {
System.out.println("任务执行:" LocalDateTime.now());
}
Tarefas agendadas podem gerar exceções, o Spring fornece@Async
anotação para executar tarefas de forma assíncrona e usar@ExceptionHandler
para lidar com exceções.
@Async
@Scheduled(cron = "0 0/30 * * * ?")
public void taskWithExceptionHandling() {
if (Math.random()