less than 1 minute read

스프링 스케쥴러 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을 생성해줍니다.

Categories:

Updated: