Spring (02). spring scheduler Quartz (2)
스프링 스케쥴러 Quartz 2번째 포스팅
0. 참고 문서
## Scheduling in Spring with Quartz Example 예제 코드
## Scheduling in Spring with Quartz 코드 설명
##Spring Boot + Quartz을 이용한 Job Scheduler 구현 (In-memory)
이번장에선 저번에 다루었던 Quartz를 코드를 보며 어떠한 기능인지 하나하나 짚어보는 시간을 갖도록 하겠습니다.
1. Dependecy
먼저 Spring boot 에서 Quartz를 사용하기 위해 maven pom.xml에 spring-boot-starter-quartz 라이브러리를 추가합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2. 스프링 부트 기반의 Quartz Scheduler를 구축해보자
스프링의 SchedulerFactoryBean은 Bean으로 선언하여 다른 클래스에서 DI(dependency injection)해서 사용할 수 있습니다.
그리고 그 SchedulerFactorBean은 ApplicationContext에서 LifeCycle 형식으로 Scheduler을 관리합니다.
@Component
public class SampleJob implements Job {
@Autowired
private SampleJobService jobService;
public void execute(JobExecutionContext context) throws JobExecutionException {
jobService.executeSampleJob();
}
}
execute() 매서드에 넘겨지는 JobExecutionContext에는 Job에 실행에 필요한 다양한 정보들이 담겨있습니다. JobDataMap을 이용하면 자유롭게 Key-Value 데이터를 담을 수도 있습니다.
Quartz 관련 설정 스프링 부트에서는 Quartz관련 설정을 application.properites에서 합니다. 관련설정이 없으면 기본값으로 구동됩니다.
#Quartz
spring.quartz.scheduler-name=QuartzScheduler
spring.quartz.properties.org.quartz.threadPool.threadCount = 5
Quartz JobBuilder
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob().ofType(SampleJob.class)
.storeDurably()
.withIdentity("Qrtz_Job_Detail")
.withDescription("Invoke Sample Job service...")
.build();
}
JobBuilder는 JobDetails를 인스턴스화 하는데 사용됩니다.이 빌더는 항상 자신을 유효한 상태로 유지하려하며, 어느시점에서든 build()를 하기 위해 합리적인 default값을 갖습니다. withIdentity를 호출하지 않더라도 JobBuilder는 적절한 JobName을 생성해줍니다.