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 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.
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
Etapa 6: Execute o programa Java acima para ver o resultado.
Observamos que cada trabalho está sendo executado em um intervalo de tempo específico.