logo

Expressão Java Cron

A tecnologia está mudando constantemente dia após dia. Às vezes, somos obrigados a executar um trabalho periodicamente no servidor. Executar o trabalho no servidor manualmente é uma tarefa difícil, portanto não pode ser feito várias vezes pelo usuário ou administrador. Para resolver este problema, Cron ajuda o programador a executar um trabalho periodicamente no servidor. É amplamente utilizado para manutenção e admiração de sistemas automatizados. Além disso, também podemos usar Expressão Cron no desenvolvimento web. Existem muitas situações em que um aplicativo da web pode precisar executar uma determinada tarefa periodicamente.

Nesta seção, discutiremos o Expressões Java Cron , está funcionando e sendo implementado por meio Agendador Java Quartz .

O que é Cron?

Basicamente, Cron é um utilitário que agenda uma tarefa. Ele permite ao usuário agendar uma tarefa periodicamente em horário, data, mês, dia e ano especificados. É amplamente utilizado em processos automatizados onde a intervenção humana não é necessária.

Expressão Java Cron

Expressão Cron

Em Java, as expressões Cron são usadas para configurar instâncias do CronTrigger aula. É uma subclasse de org.quartz.Trigger aula. Uma expressão Cron é uma string ou expressão que consiste em seis ou sete campos (unidade de tempo). Ele descreve detalhes individuais da programação e do comando.

ciclo de vida de desenvolvimento de software
 

Uma expressão cron pode ser simples ou complexa. Por exemplo,

Simples: * * * * ? * (asterisco indica campos)

Complexo: 0 0/4 12,15,3-35,52 ? Maio, junho, julho TER-SÁB 2002-2010.

Além disso, observe que uma expressão Cron pode ser escrita em estilos diferentes, como segue. Por exemplo, as três expressões Cron a seguir têm o mesmo significado.

  • 0 10 9 ? * *
  • 0 10 9 * * ?
  • 0 10 9 * * ? *

Todas as três expressões são executadas às 9h10 todos os dias.

Campos usados ​​na expressão Cron

Nas expressões Cron, a unidade de tempo é conhecida como campo . Eles são separados por espaços em branco e podem conter qualquer um dos valores permitidos com várias combinações dos caracteres permitidos para aquele campo. Ele mostra os campos na ordem esperada. A tabela a seguir descreve a unidade de tempo e os valores correspondentes, além dos símbolos que podem ser usados ​​com as expressões.

Nome do campo Obrigatório Valores permitidos Caracteres especiais e símbolos permitidos com campos
Segundos Sim 0-59 , - * /
Minutos Sim 0-59 , - * /
Horas Sim 0-23 , - * /
Dia do mês Sim -31 , - * ? / L W C
Mês Sim 0-11 ou JAN-DEZ , - * /
Dia da semana Sim 1-7 ou DOM-SAT , - * ? / L C#
Ano Opcional vazio ou 1970-2099 , - * /

Símbolos e letras especiais usados ​​na expressão Cron

Asterisco (*): O símbolo é utilizado quando queremos executar um evento em cada unidade de tempo (minuto, segundo, hora). Por exemplo, se * for usado com unidade de tempo em minutos, significa que um evento será executado a cada minuto, automaticamente.

Ponto de interrogação (?): O símbolo é usado em campos como dia do mês e dia da semana. Denota o valor arbitrário e ignora o valor do campo. Suponha que queiramos executar um script no dia 2 de cada mês, sem nos importar com o dia da semana que cai no segundo dia do mês. Neste caso, devemos especificar um símbolo de ponto de interrogação ( ?) no campo dia da semana.

Hífen (-): O símbolo é usado para especificar o intervalo. Ele determina a faixa de valores. Por exemplo, se um campo de hora for definido como , significa que um evento será executado na 4ª e 5ª hora.

Vírgula (,): É utilizado para definir valores dos campos separados por vírgula. Por exemplo, sexta, sábado, domingo, etc.

Barra (/): É usado para incrementar valores da unidade de tempo especificada. Suponha que queremos iniciar um evento aos 10 minutos, depois disso somos obrigados a executar o mesmo evento aos 20 minutos, a próxima execução aos 30 minutos e assim por diante. Neste caso, especificamos a hora de início e o valor incremental, separados por barra.

Por exemplo, se 10/10 especificado no campo minuto, significa que o primeiro evento será executado aos 10 minutos, e a próxima execução será aos 20 minutos de uma hora, e portanto não.

L (Último): O uso de L tem significados diferentes em vários campos.

  • Se tiver sido usado no campo, denota o último dia do mês, conforme calendário.
  • Se tiver sido usado com um valor de deslocamento como L-5 . Denota o 5ºaté o último dia do mês civil.
  • Se tiver sido usado no campo, denota o último dia da semana. Também pode ser usado com outro valor no campo. Por exemplo, 7L denota o último sábado .

EM: O último representa os dias da semana (segunda a sexta). Ele determina o dia da semana mais próximo do dia do mês especificado.

Por exemplo, se especificarmos 5W no campo dia do mês, significa que determinaremos o dia da semana próximo ao dia 5ºdo mês.

  • Se o 5ºdo mês é Sábado , um evento será acionado em 9º do mês.
  • Se o 5ºdo mês é Domingo , um evento será acionado em onzeº do mês.

Pode existir outro caso. Suponha , 1stdo mês é sábado, um evento ocorrerá no dia 3terceirodo mês. Isso significa que o evento ou script não será executado no mês anterior.

Cerquilha (#): Representa a enésima ocorrência de um dia da semana do mês. Por exemplo, a terceira sexta-feira do mês pode ser indicada como 6#3 .

Por que devemos usar expressões cron?

Existem vários motivos para usar expressões cron. Alguns deles são:

  • Podemos expirar e apagar arquivos de dados armazenados em cache em determinados intervalos.
  • Podemos agendar newsletters e e-mails diários.
  • Podemos agendar tarefas de longa execução para serem executadas a partir de um script de linha de comando, em vez de executá-las a partir de um script da web. Como codificar vídeos ou enviar e-mails em massa.

Exemplo de expressões Cron

Vamos ver algumas expressões Cron comuns que usam símbolos e campos especiais.

Expressão Cron Significado das expressões Cron
0 12 * * ? Isso indica que um trabalho será executado às 12h (meio-dia) todos os dias.
0/5 13,18 * * ? Denota que um trabalho será executado a cada cinco minutos, começando às 13h e terminando às 13h55 e depois começando às 18h e terminando às 18h55, todos os dias.
0-5 13 * * ? Denota que um trabalho será executado a cada minuto, começando às 13h e terminando às 13h05, todos os dias.
15,45 13 ? 6 terça Denota que um trabalho será executado às 13h15 e 13h45 todas as terças-feiras do mês de junho.
30 9? * 2A. A 6A Denota que um trabalho será executado às 9h30 todas as segundas, terças, quartas, quintas e sextas-feiras.
30 9 15 * ? Isso indica que um trabalho será executado às 9h30 do dia 15 de cada mês.
0 18 L * ? Denota que um trabalho será executado às 18h do último dia de cada mês.
0 18 L-3 * ? Isso indica que um trabalho será executado às 18h do terceiro ao último dia de cada mês.
30 10 ? *5L Indica que um trabalho será executado às 10h30 da última quinta-feira de cada mês.
0 10 ? * 23 Denota que um trabalho será executado às 10h da terceira segunda-feira de cada mês.
0 0 10/5 * ? Isso denota que um trabalho será executado à meia-noite todos os dias durante cinco dias, começando no 10º dia do mês.
0 11 11 11 11 ? Indica que um trabalho será executado todo dia 11 de novembro às 11h11
0 15 10 ? * 6L 2002-2005 Dispare às 10h15 em todas as últimas sextas-feiras de cada mês durante os anos de 2002, 2003, 2004 e 2005.
0 0 0 ? * MEU#1 Denota que um trabalho será executado na primeira segunda-feira do mês à meia-noite.
0 0 0 LW * * Denota que um trabalho será executado no último dia da semana do mês à meia-noite.
0 0/30 8-10 * * * Denota que um trabalho será executado às 8h, 8h30, 9h, 9h30, 10h e 10h30 todos os dias.

Configuração especial em expressões Cron

Além do símbolo especial acima, a expressão Cron também suporta alguns valores especiais predefinidos. Esses valores podem ser usados ​​em vez dos campos.

    @anualmente ou @anualmente:Ele executa um trabalho uma vez por ano. Por exemplo, '0 0 0 1 1 *' .@por mês: Executa o trabalho uma vez por mês. Por exemplo, '0 0 0 1 * *'. @semanalmente: Executa o trabalho uma vez por semana. Por exemplo, '0 0 0 * * 0'. @diariamente ou @meia-noite:Ele executa o trabalho uma vez por dia. Por exemplo, '0 0 0 * * *'. @por hora: executa o trabalho de hora em hora. Por exemplo, '0 0 * * * *'.

Usando expressão Cron em Java

Java fornece um sistema de agendamento de tarefas de código aberto que agenda uma tarefa para uma unidade de tempo específica. Podemos baixar o agendador Quartz do site oficial.

unidade lógica aritmética

Em termos de programação, job é uma classe que contém a tarefa a ser executada. Mas a questão é como agendá-lo. Para agendar um trabalho, definimos um gatilho e especificamos quando o trabalho será executado.

Se quisermos implementar o agendador Quartz, podemos adicionar a dependência, da seguinte forma:

 org.quartz-scheduler quartz 2.2.1 

Nota: Antes de executar o seguinte programa Java, certifique-se de ter adicionado quartzo-2.2.1.jar arquivo no caminho, caso contrário você receberá um erro.

Vamos ver a implementação da expressão cron e do job por meio de um programa Java.

Passo 1: Crie um projeto Maven. Criamos com o nome CronExemplo .

Passo 2: Dentro do projeto, crie dois pacotes, a saber com.javatpoint.app e com.javatpoint.job . No primeiro pacote definiremos a classe principal e no segundo pacote definiremos os jobs (no nosso caso o número de jobs é cinco).

Etapa 3: No arquivo pom.xml, cole a seguinte dependência. Ele baixa automaticamente os arquivos JAR necessários para o projeto. O arquivo pom se parece com o seguinte:

 4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1 

Passo 4: Crie cinco trabalhos (no pacote com.javatpoint.job) que deseja executar. No nosso caso, definimos os cinco trabalhos a seguir.

Job1.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job1 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job1 --->>> Hello user! Time is ' + new Date()); } } 

Job2.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job2 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job2 --->>> Hello user! Time is ' + new Date()); } } 

Job3.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job3 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job3 --->>> Hello user! Time is ' + new Date()); } } 

Job4.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job4 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job4 --->>> Hello user! Time is ' + new Date()); } } 

Job5.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job5 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job5 --->>> Hello user! Time is ' + new Date()); } } 

Etapa 5: Crie a classe principal com o nome MyApp.

MeuApp.java

 package com.javatpoint.app; import org.quartz.CronExpression; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.javatpoint.job.Job1; import com.javatpoint.job.Job2; import com.javatpoint.job.Job3; import com.javatpoint.job.Job4; import com.javatpoint.job.Job5; public class MyApp { public static void main(String args[]) { try { JobDetail job1 = JobBuilder.newJob(Job1.class) .withIdentity('job1', 'group1').build(); Trigger trigger1 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger1', 'group1') .withSchedule(CronScheduleBuilder.cronSchedule('0/5 * * * * ?')) .build(); Scheduler scheduler1 = new StdSchedulerFactory().getScheduler(); scheduler1.start(); scheduler1.scheduleJob(job1, trigger1); JobDetail job2 = JobBuilder.newJob(Job2.class) .withIdentity('job2', 'group2').build(); Trigger trigger2 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger2', 'group2') .withSchedule(CronScheduleBuilder.cronSchedule(new CronExpression('0/7 * * * * ?'))) .build(); Scheduler scheduler2 = new StdSchedulerFactory().getScheduler(); scheduler2.start(); scheduler2.scheduleJob(job2, trigger2); JobDetail job3 = JobBuilder.newJob(Job3.class) .withIdentity('job3', 'group3').build(); Trigger trigger3 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger3', 'group3') .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(13, 46)) .build(); Scheduler scheduler3 = new StdSchedulerFactory().getScheduler(); scheduler3.start(); scheduler3.scheduleJob(job3, trigger3); JobDetail job4 = JobBuilder.newJob(Job4.class) .withIdentity('job4', 'group4').build(); Trigger trigger4 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger4', 'group4') .withSchedule(CronScheduleBuilder.weeklyOnDayAndHourAndMinute(3, 13, 46)) .build(); Scheduler scheduler4 = new StdSchedulerFactory().getScheduler(); scheduler4.start(); scheduler4.scheduleJob(job4, trigger4); JobDetail job5 = JobBuilder.newJob(Job5.class) .withIdentity('job5', 'group5').build(); Trigger trigger5 = TriggerBuilder .newTrigger().withIdentity('cronTrigger5', 'group5') .withSchedule(CronScheduleBuilder.monthlyOnDayAndHourAndMinute(28, 13, 46)) .build(); Scheduler scheduler5 = new StdSchedulerFactory().getScheduler(); scheduler5.start(); scheduler5.scheduleJob(job5, trigger5); Thread.sleep(100000); scheduler1.shutdown(); scheduler2.shutdown(); scheduler3.shutdown(); scheduler4.shutdown(); scheduler5.shutdown(); } catch (Exception e) { e.printStackTrace(); } } } 

Quando concluímos todas as etapas acima, o diretório do projeto se parece com o seguinte:

mapas java
Expressão Java Cron

Etapa 6: Execute o programa Java acima para ver o resultado.

Expressão Java Cron

Observamos que cada trabalho está sendo executado em um intervalo de tempo específico.