티스토리 뷰
Quartz scheduler란?
거의 모든 Java 응용 프로그램에 통합 할 수 있는 풍부한 기능의 오픈 소스 작업 스케쥴 라이브러리이다.
보통 배치작업이나 변경된 정보를 주기적으로 reload 해주기 위해 사용한다.
대략적인 구조는 이러하다. 스케쥴러의 특성상 언제(Trigger)와 무엇을(Job Detail) 로 구성되어 있다.
일단 Quartz를 사용하기 위해서는 dependency 추가가 필요하다.
pom.xml
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
추가가 되었다면 샘플을 작성해 보도록 하자.
Quartz Scheduler Sample
<bean id="sampleJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"
p:jobClass="sample.job.SampleJob" p:durability="true" />
<bean id="sampleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
p:jobDetail-ref="sampleJob" p:startDelay="20000" p:repeatInterval="3000000" />
<bean id="sampleScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
위의 그림처럼 Scheduler는 Trigger를, Trigger는 Job을 가지고 있는 구조이다. sampleJob이라는것은 sampleTrigger에 끼워져 작동을 하고 이 sampleTrigger는 5분(300000ms)에 한번씩 동작을 한다. 즉 5분에 한번씩 sampleJob이 동작하는 Schedule을 구성했다. 이렇게 interval 단위로 스케쥴러를 작동시킬 수 있고 Cron Expression에 의해 동작시킬수도 있다.
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="sampleJob" />
<property name="cronExpression" value="0/5 * * * * ?" />
</bean>
이런식으로 Trigger를 구성할때 CronTriggerBean을 활용할 수 있다.
이제는 위에 나온 sampleJob을 구현해 보도록 하자.
SampleJob.java
@Slf4j
public class SampleJob extends QuartzJobBean {
protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
log.debug("Quarts Job Start now.");
//실제 동작시킬 코드를 입력
log.debug("Quarts Job End now.");
}
}
Quartz Job을 만들때는 QuartzJobBean 을 상속받아서 executeInternal() 을 오버라이딩하면 된다. 이 메소드 내에 주기적으로 동작시키고 싶은 일을 구현하면 된다.
끝!
'Framework > Spring' 카테고리의 다른 글
Springboot에서 Hot swapping 적용하기 (springloaded vs devtools) (0) | 2020.07.09 |
---|---|
Springboot 환경에서 JSP 파일 재기동 없이 반영하기 (0) | 2020.07.07 |
Spring application.properties Util로 만들어 쉽게 값 가져오기 (0) | 2020.06.30 |
spring + mysql datasource 설정 (0) | 2020.06.29 |
Springboot 2.x migration 시 ObjectPostProcessor not found 대처방법 (0) | 2020.06.26 |