[java] Quartz Scheduler와 Spring Framework의 통합

Quartz Scheduler는 자바 기반의 오픈 소스 작업 스케줄러이며, Spring Framework는 자바 기반의 애플리케이션 개발을 위한 프레임워크입니다. 이 두 기술을 함께 사용하면 스케줄링 작업을 효율적으로 관리하고 실행할 수 있습니다.

1. 의존성 추가

먼저, Spring에서 Quartz Scheduler를 사용하기 위해 의존성을 추가해야 합니다. pom.xml 파일에 아래의 의존성을 추가합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

2. Scheduler 생성

Quartz Scheduler를 사용하기 위해서는 스케줄러를 생성해야 합니다. Spring Framework에서는 SchedulerFactoryBean 클래스를 사용하여 스케줄러를 생성할 수 있습니다. 아래는 스케줄러를 생성하는 예시입니다.

@Configuration
public class SchedulerConfig {

    @Autowired
    private JobFactory jobFactory;

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setJobFactory(jobFactory);
        factory.setQuartzProperties(quartzProperties());
        factory.setSchedulerName("MyScheduler");
        factory.setApplicationContextSchedulerContextKey("applicationContext");
        factory.setAutoStartup(true);
        return factory;
    }

    @Bean
    public Properties quartzProperties() throws IOException {
        PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
        propertiesFactoryBean.setLocation(new ClassPathResource("quartz.properties"));
        propertiesFactoryBean.afterPropertiesSet();
        return propertiesFactoryBean.getObject();
    }
}

3. Job과 Trigger 정의

스케줄링 작업은 Job과 Trigger로 구성됩니다. Job은 실제로 실행되어야 할 작업이고, Trigger는 작업의 실행 조건을 정의합니다. 아래는 Job과 Trigger를 정의하는 예시입니다.

@Component
public class MyJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 스케줄링 작업 실행 로직 작성
    }
}

@Configuration
public class SchedulerConfig {

    @Autowired
    private MyJob myJob;

    @Bean
    public JobDetailFactoryBean jobDetail() {
        JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
        jobDetailFactoryBean.setJobClass(MyJob.class);
        jobDetailFactoryBean.setDurability(true);
        return jobDetailFactoryBean;
    }

    @Bean
    public SimpleTriggerFactoryBean trigger(JobDetail jobDetail) {
        SimpleTriggerFactoryBean triggerFactory = new SimpleTriggerFactoryBean();
        triggerFactory.setJobDetail(jobDetail);
        triggerFactory.setStartDelay(1000L);
        triggerFactory.setRepeatInterval(5000L);
        return triggerFactory;
    }
}

4. 스케줄러 실행

스케줄러를 실행하기 위해 Spring 애플리케이션을 시작할 때 스케줄러를 자동으로 시작하도록 설정해야 합니다. 이를 위해 @EnableScheduling 어노테이션을 사용하여 스케줄링 기능을 활성화시킬 수 있습니다. 아래는 스케줄링을 활성화하는 예시입니다.

@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

5. 스케줄링 작업 실행 확인

위의 설정을 마친 뒤에는 정의한 스케줄링 작업이 설정된 주기에 맞게 실행되는지 확인할 수 있습니다. 이를 위해 로그를 출력하거나 작업이 수행되는 부분에 디버깅을 추가할 수 있습니다.

결론

이번 글에서는 Quartz Scheduler와 Spring Framework의 통합 방법에 대해 알아보았습니다. 이를 통해 스케줄링 작업을 효율적으로 관리하고 실행하는 방법을 배웠습니다. Quartz Scheduler와 Spring Framework를 함께 사용하여 시간에 따라 반복되는 작업을 스케줄링할 수 있습니다.

참고 자료