logo

자바 크론 표현식

기술은 날마다 끊임없이 변화하고 있습니다. 때로는 서버에서 주기적으로 작업을 실행해야 하는 경우도 있습니다. 서버에서 작업을 수동으로 실행하는 것은 어려운 작업이므로 사용자나 관리자가 여러 번 수행할 수 없습니다. 이 문제를 해결하기 위해, 크론 프로그래머가 서버에서 주기적으로 작업을 실행하는 데 도움이 됩니다. 자동화된 시스템 유지 관리 및 감상에 널리 사용됩니다. 이 외에도 다음을 사용할 수도 있습니다. 크론 표현 웹 개발 중. 웹 애플리케이션이 특정 작업을 주기적으로 실행해야 하는 상황이 많이 있습니다.

이 섹션에서는 자바 크론 표현식 , 그것은 다음을 통해 작동하고 구현됩니다. Java Quartz 스케줄러 .

크론이란 무엇입니까?

기본적으로 Cron은 작업을 예약하는 유틸리티입니다. 이를 통해 사용자는 지정된 시간, 날짜, 월, 약한 및 연도에 주기적으로 작업을 예약할 수 있습니다. 사람의 개입이 필요하지 않은 자동화된 프로세스에 널리 사용됩니다.

자바 크론 표현

크론 표현

Java에서는 Cron 표현식을 사용하여 인스턴스를 구성합니다. 크론트리거 수업. 의 하위 클래스입니다. org.quartz.트리거 수업. Cron 표현식은 6개 또는 7개의 필드(시간 단위)로 구성된 문자열 또는 표현식입니다. 스케줄 및 명령어에 대한 개별적인 내용을 설명합니다.

 

cron 표현식은 간단할 수도 있고 복잡할 수도 있습니다. 예를 들어,

단순한: * * * * ? * (별표는 필드를 나타냄)

복잡한: 0 0/4 12,15,3-35,52 ? 2002-2010년 5월, 6월, 7월 화요일-토요일.

또한 Cron 표현식은 다음과 같이 다양한 스타일로 작성될 수 있습니다. 예를 들어 다음 세 가지 Cron 표현식은 동일한 의미를 갖습니다.

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

세 가지 표현식은 모두 매일 오전 9시 10분에 실행됩니다.

Cron 표현식에 사용되는 필드

Cron 표현식에서 시간 단위는 다음과 같습니다. 필드 . 이는 공백으로 구분되며 해당 필드에 허용되는 문자의 다양한 조합과 함께 허용되는 값을 포함할 수 있습니다. 예상된 순서로 필드를 표시합니다. 다음 표에는 표현식과 함께 사용할 수 있는 시간 단위와 해당 값, 기호가 나와 있습니다.

분야 명 필수의 허용되는 값 필드에 허용되는 특수 문자 및 기호
0-59 , - * /
0-59 , - * /
시간 0-23 , - * /
해당 월의 일 -31 , - * ? / 패 승 C
0~11 또는 1월~12월 , - * /
요일 1-7 또는 SUN-SAT , - * ? / LC #
년도 선택 과목 비어 있거나 1970-2099 , - * /

Cron 표현식에 사용되는 특수 기호 및 문자

별표(*): 매 시간 단위(분, 초, 시)마다 이벤트를 실행하고자 할 때 사용하는 기호입니다. 예를 들어 *를 분 시간 단위로 사용하면 1분마다 자동으로 이벤트가 실행된다는 의미입니다.

물음표 (?): 기호는 날짜, 요일과 같은 필드에 사용됩니다. 임의의 값을 나타내고 필드 값을 무시합니다. 매월 2일이 무슨 요일인지 상관하지 않고 매월 2일에 스크립트를 실행하고 싶다고 가정해 보겠습니다. 이 경우 물음표 기호( ?) 요일 필드에.

하이픈(-): 기호는 범위를 지정하는 데 사용됩니다. 값의 범위를 결정합니다. 예를 들어 시간 필드가 다음과 같이 정의된 경우 , 이벤트가 4시간과 5시간에 실행된다는 의미입니다.

반점 (,): 쉼표로 구분된 필드 값을 정의하는 데 사용됩니다. 예를 들어 금, 토, 일 등입니다.

슬래시(/): 지정된 시간 단위의 값을 증가시키는 데 사용됩니다. 10분에 이벤트를 시작하고 그 이후에는 20분에 동일한 이벤트를 실행하고, 다음 실행은 30분에 실행해야 하는 식으로 진행된다고 가정해 보겠습니다. 이 경우 시작 시간과 증분 값을 슬래시로 구분하여 지정합니다.

자바 수학 펑

예를 들어, 10/10 분 필드에 지정된 경우 첫 번째 이벤트가 10분에 실행되고 다음 실행이 20분에 실행된다는 의미이므로 그렇지 않습니다.

L(마지막): L의 사용은 다양한 분야에서 다른 의미를 갖습니다.

  • 해당 분야에서 사용된 경우 필드에서는 달력에 따라 해당 월의 마지막 날을 나타냅니다.
  • 다음과 같은 오프셋 값과 함께 사용된 경우 L-5 . 5를 나타냅니다.해당 월의 마지막 날까지.
  • 해당 분야에서 사용된 경우 필드에서는 해당 주의 마지막 날을 나타냅니다. 필드의 다른 값과 함께 사용할 수도 있습니다. 예를 들어, 7L 을 나타냅니다 지난 토요일 .

안에: 나중은 평일(월요일부터 금요일까지)을 나타냅니다. 해당 월의 지정된 날짜에 가장 가까운 평일을 결정합니다.

예를 들어, 우리가 지정한다면 5W day of Month 필드에서는 5에 가까운 평일을 결정한다는 의미입니다.달의.

  • 만약 5그 달은 토요일 , 이벤트가 실행됩니다 9 달의.
  • 만약 5그 달은 일요일 , 이벤트가 실행됩니다 열하나 달의.

또 다른 경우가 있을 수도 있습니다. 가정하다 , 1매월 토요일이고 3일에 이벤트가 발생합니다rd달의. 이는 이전 달에 이벤트나 스크립트가 실행되지 않음을 의미합니다.

해시(#): 해당 월의 n번째 평일을 나타냅니다. 예를 들어, 매월 세 번째 금요일은 다음과 같이 표시될 수 있습니다. 6#3 .

왜 cron 표현식을 사용해야 합니까?

cron 표현식을 사용하는 데에는 여러 가지 이유가 있습니다. 그 중 일부는 다음과 같습니다:

  • 특정 간격으로 캐시된 데이터 파일을 만료하고 삭제할 수 있습니다.
  • 매일 뉴스레터와 이메일을 예약할 수 있습니다.
  • 웹 스크립트에서 실행하는 대신 명령줄 스크립트에서 실행되도록 장기 실행 작업을 예약할 수 있습니다. 비디오를 인코딩하거나 대량 이메일을 보내는 것과 같습니다.

크론 표현식의 예

특수 기호와 필드를 사용하는 몇 가지 일반적인 Cron 표현식을 살펴보겠습니다.

크론 표현 크론 표현식의 의미
0 12 * * ? 매일 오후 12시(정오)에 작업이 실행됨을 나타냅니다.
0/5 13.18 * * ? 이는 매일 오후 1시에 시작하여 오후 1시 55분에 종료되고 오후 6시에 시작하여 오후 6시 55분에 종료되는 작업이 5분마다 실행됨을 나타냅니다.
0-5 13 * * ? 이는 작업이 매일 오후 1시부터 오후 1시 5분까지 매분마다 실행됨을 나타냅니다.
15,45 13? 6화 이는 6월 매주 화요일 오후 1시 15분과 오후 1시 45분에 작업이 실행됨을 나타냅니다.
30 9? * 월~금 매주 월요일, 화요일, 수요일, 목요일, 금요일 오전 9시 30분에 작업이 실행됨을 나타냅니다.
30 9 15 * ? 매월 15일 오전 9시 30분에 작업이 실행됨을 나타냅니다.
0 18L * ? 이는 매월 마지막 날 오후 6시에 작업이 실행됨을 나타냅니다.
0 18 L-3 * ? 매월 3일부터 말일까지 오후 6시에 작업이 실행됨을 나타냅니다.
30 10? *5L 이는 매월 마지막 목요일 오전 10시 30분에 작업이 실행됨을 나타냅니다.
0 10 ? * 23 이는 매월 세 번째 월요일 오전 10시에 작업이 실행됨을 나타냅니다.
0 0 10/5 * ? 매월 10일부터 5일 동안 매일 자정 12시에 작업이 실행됨을 나타냅니다.
0 11 11 11 11 ? 이는 작업이 매년 11월 11일 오전 11시 11분에 실행됨을 나타냅니다.
0 15 10 ? * 6L 2002-2005 2002년, 2003년, 2004년, 2005년 동안 매월 마지막 금요일 오전 10시 15분에 실행됩니다.
0 0 0? * 마이#1 이는 해당 월의 첫 번째 월요일 자정에 작업이 실행됨을 나타냅니다.
0 0 0 LW * * 이는 해당 월의 마지막 주중 자정에 작업이 실행됨을 나타냅니다.
0 0/30 8-10 * * * 이는 작업이 매일 8:00, 8:30, 9:00, 9:30, 10:00 및 10:30에 실행됨을 나타냅니다.

Cron 표현식의 특수 설정

위의 특수 기호 외에도 Cron 표현식은 사전 정의된 특수 값도 지원합니다. 이러한 값은 필드 대신 사용할 수 있습니다.

    @매년 또는 @매년:1년에 한 번씩 작업을 진행합니다. 예를 들어, '0 0 0 1 1 *' .@월간 간행물: 한 달에 한 번씩 작업을 실행합니다. 예를 들어, '0 0 0 1 * *'. @주간: 일주일에 한 번씩 작업을 실행합니다. 예를 들어, '0 0 0 * * 0'. @매일 또는 @자정:하루에 한 번씩 작업을 실행합니다. 예를 들어, '0 0 0 * * *'. @시간별: 매시간 작업을 실행합니다. 예를 들어, '0 0 * * * *'.

Java에서 Cron 표현식 사용

Java는 특정 시간 단위에 대해 작업을 예약하는 오픈 소스 작업 예약 시스템을 제공합니다. Quartz 스케줄러는 공식 사이트에서 다운로드할 수 있습니다.

프로그래밍 측면에서 작업은 실행할 작업을 포함하는 클래스입니다. 하지만 문제는 일정을 어떻게 잡느냐이다. 작업 예약을 위해 트리거를 정의하고 작업 실행 시기를 지정합니다.

Quartz 스케줄러를 구현하려면 다음과 같이 종속성을 추가할 수 있습니다.

 org.quartz-scheduler quartz 2.2.1 

참고: 다음 Java 프로그램을 실행하기 전에 다음을 추가했는지 확인하십시오. 석영-2.2.1.jar 경로에 파일을 저장하지 않으면 오류가 발생합니다.

Java 프로그램을 통해 cron 표현식과 작업을 구현하는 방법을 살펴보겠습니다.

1 단계: 메이븐 프로젝트를 생성합니다. 우리는 이름으로 만들었습니다 크론예제 .

2 단계: 프로젝트 내에서 두 개의 패키지를 만듭니다. com.javatpoint.app 그리고 com.javatpoint.job . 첫 번째 패키지에서는 메인 클래스를 정의하고 두 번째 패키지에서는 작업을 정의합니다(이 경우 작업 수는 5개입니다).

3단계: pom.xml 파일에 다음 종속성을 붙여넣습니다. 프로젝트에 필요한 JAR 파일을 자동으로 다운로드합니다. pom 파일은 다음과 같습니다.

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

4단계: 실행하려는 5개의 작업(com.javatpoint.job 패키지에서)을 생성하십시오. 우리의 경우 다음과 같은 5가지 작업을 정의했습니다.

엑셀 단축키 모두 대문자

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()); } } 

5단계: MyApp이라는 이름의 기본 클래스를 만듭니다.

MyApp.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(); } } } 

위의 모든 단계를 완료하면 프로젝트 디렉터리는 다음과 같습니다.

자바 크론 표현식

6단계: 위의 Java 프로그램을 실행하여 출력을 확인하세요.

자바 크론 표현식

우리는 모든 작업이 특정 시간 간격으로 실행되는 것을 관찰합니다.