특정 시간 간격을 반복하거나 특정 시간에 로직 실행 입안자말하다.
이러한 작업을 위해 봄~ 안에 2가지 옵션을 제공합니다.
- 스프링 플래너
- 스프링 쿼츠
미세한 조절이 가능한 분 석영 스케줄러 라이브러리알아 보자
기본 설정
| 일하다 | 예약할 실제 작업이 포함된 개체입니다. – JobListener |
| 주문 데이터 | 작업에 사용할 개체 릴리스 데이터 |
| JobDataMap |
스케줄러에서 작업을 실행할 때 사용할 변수 값을 전달하기 위해(키 값 형식) |
| 작업 세부 사항 |
주문정보를 수집하는 객체 |
| JobBuilder | 작업 인스턴스를 정의하는 JobDetail 인스턴스를 만드는 데 사용됩니다. |
| 공제 |
작업이 실행되는 시기를 구성하는 객체 -TriggerListener |
| TriggerBuilder | 트리거 인스턴스 생성에 사용 |
| 입안자 | JobDetail과 Trigger 정보를 이용하여 시스템에 Job을 등록하고 Trigger 활성화 시 지정된 Job을 실행하는 객체 |
| 스케줄러팩토리 | 스케줄러 인스턴스를 생성하는 객체 |
| 석영 속성 | Quartz 스케줄러에 대한 설정 구성 파일 |
| 잡스토어 | 스케줄러에 등록된 작업 정보 및 실행 이력이 저장되는 영역 |
| 작업 실행 컨텍스트 |
실행 메소드의 매개변수로 전달되는 인수입니다. JobDetail 인스턴스가 스케줄러에 의해 실행될 때 커밋되고 실행이 완료되면 트리거에 커밋됩니다. |
예약된 시간에 배치 작업을 실행하려면
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.PersistJobDataAfterExecution;
@PersistJobDataAfterExecution
public class SchedulerTest implements Job{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
int idx = dataMap.getInt("idx");
System.out.println("* " + idx + " 스케줄러 수행 (" + new Date(System.currentTimeMillis()) + ")");
dataMap.putAsString("idx", idx+1);
if (5 <= idx) { // 수행 횟수 지정
JobExecutionException e = new JobExecutionException("End Repeat");
e.setUnscheduleAllTriggers(true);
throw e;
}
}
}
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class Simpletest {
public static void main(String() args) {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
try {
Scheduler scheduler = schedulerFactory.getScheduler();
JobDetail job = JobBuilder.newJob(SchedulerTest.class)
.withIdentity("jobName", Scheduler.DEFAULT_GROUP)
.usingJobData("idx", 1)
.build();
// 5초 주기 Simple 스케줄링
SimpleTrigger simplTrigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", Scheduler.DEFAULT_GROUP)
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)
.withRepeatCount(3)) // 반복 횟수
.build();
// 10초 주기 Cron 스케줄링
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
.withIdentity("trigger2", Scheduler.DEFAULT_GROUP)
.withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?"))
.build();
scheduler.scheduleJob(job, cronTrigger);
scheduler.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
단순 트리거

크론 트리거

구성을 위한 pom.xml (코드 표시)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>quartz_test</groupId>
<artifactId>simple01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java-version>1.7</java-version>
<org.springframework-version>4.2.3.RELEASE</org.springframework-version>
<maven.test.skip>true</maven.test.skip>
<cobertura.skip>true</cobertura.skip>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- quartz scheduler -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Set a compiler level -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
</plugins>
</build>
</project>
