Preloader image
DDD

자바

Spring Boot에서 Quartz 스케줄러를 사용하는 방법

작성자 관리자 (admin)
조회수 4,863
입력일 2024-05-17 10:02:29

Spring Boot에서 Quartz 스케줄러를 사용하는 방법

Quartz는 고급 스케줄링 기능을 제공하는 라이브러리로, 다양한 작업을 복잡한 스케줄로 실행할 수 있습니다.
여기에서는 Quartz를 Spring Boot 프로젝트에 통합하고 간단한 스케줄링 작업 설정

1. 프로젝트 설정
먼저 Maven 또는 Gradle을 사용하여 Quartz와 Spring Boot를 설정합니다. 여기서는 Maven을 사용한 예제를 제공합니다.

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

2. Quartz 설정
Quartz를 설정하는 클래스를 작성합니다. 이 클래스는 Quartz 스케줄러와 작업을 설정하는 역할을 합니다.

- java
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.CronScheduleBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail jobDetail() {
        return JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger trigger(JobDetail jobDetail) {
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail)
                .withIdentity("myTrigger")
                .withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")) // 매 10초마다 실행
                .build();
    }

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(Trigger trigger, JobDetail jobDetail) {
        SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
        schedulerFactory.setJobDetails(jobDetail);
        schedulerFactory.setTriggers(trigger);
        return schedulerFactory;
    }
}

3. Quartz Job 작성
Quartz에서 실행될 작업을 정의하는 클래스를 작성합니다. 이 클래스는 org.quartz.Job 인터페이스를 구현해야 합니다.

- java
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.time.LocalDateTime;

public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Quartz Job executed at: " + LocalDateTime.now());
    }
}

4. Spring Boot 애플리케이션 클래스
Spring Boot 애플리케이션 클래스를 작성하여 애플리케이션을 실행합니다.

- java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

5. 실행 및 테스트
이제 애플리케이션을 실행하면 MyJob 클래스에 정의된 작업이 매 10초마다 실행되는 것을 볼 수 있습니다. 콘솔에 "Quartz Job executed at: " 메시지가 주기적으로 출력되는 것을 확인할 수 있습니다.