[Spring] Quartz

특정 시간 간격을 반복하거나 특정 시간에 로직 실행 입안자말하다.

이러한 작업을 위해 ~ 안에 2가지 옵션을 제공합니다.

  1. 스프링 플래너
  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>