Spring Boot - Agendamento
A programação é um processo de execução de tarefas para um período de tempo específico. Spring Boot fornece um bom suporte para escrever um planejador nos aplicativos Spring.
Expressão Java Cron
As expressões Java Cron são usadas para configurar as instâncias de CronTrigger, uma subclasse de org.quartz.Trigger. Para obter mais informações sobre a expressão cron Java, você pode consultar este link -
https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm
A anotação @EnableScheduling é usada para habilitar o planejador para seu aplicativo. Essa anotação deve ser adicionada ao arquivo de classe do aplicativo Spring Boot principal.
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
A anotação @Scheduled é usada para acionar o planejador para um período de tempo específico.
@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() throws Exception {
}
A seguir está um exemplo de código que mostra como executar a tarefa a cada minuto, começando às 9h e terminando às 9h59, todos os dias
package com.tutorialspoint.demo.scheduler;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class Scheduler {
@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println("Java cron job expression:: " + strDate);
}
}
A captura de tela a seguir mostra como o aplicativo foi iniciado às 09:03:23 e para cada minuto a partir desse momento a tarefa do agendador de cron job foi executada.
Taxa fixa
O agendador de taxa fixa é usado para executar as tarefas em um horário específico. Ele não espera pela conclusão da tarefa anterior. Os valores devem estar em milissegundos. O código de amostra é mostrado aqui -
@Scheduled(fixedRate = 1000)
public void fixedRateSch() {
}
Um código de amostra para executar uma tarefa a cada segundo desde a inicialização do aplicativo é mostrado aqui -
package com.tutorialspoint.demo.scheduler;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class Scheduler {
@Scheduled(fixedRate = 1000)
public void fixedRateSch() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println("Fixed Rate scheduler:: " + strDate);
}
}
Observe a seguinte captura de tela que mostra o aplicativo que foi iniciado às 09:12:00 e depois disso cada segunda tarefa do planejador de taxa fixa foi executada.
Atraso fixo
Agendador de atraso fixo é usado para executar as tarefas em um horário específico. Deve aguardar a conclusão da tarefa anterior. Os valores devem estar em milissegundos. Um exemplo de código é mostrado aqui -
@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void fixedDelaySch() {
}
Aqui, o initialDelay é o tempo após o qual a tarefa será executada pela primeira vez após o valor de atraso inicial.
Um exemplo para executar a tarefa a cada segundo após 3 segundos da inicialização do aplicativo foi concluído é mostrado abaixo -
package com.tutorialspoint.demo.scheduler;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class Scheduler {
@Scheduled(fixedDelay = 1000, initialDelay = 3000)
public void fixedDelaySch() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println("Fixed Delay scheduler:: " + strDate);
}
}
Observe a seguinte captura de tela que mostra o aplicativo que foi iniciado às 09:18:39 e a cada 3 segundos, a tarefa do agendador de atraso fixo foi executada a cada segundo.