상세 컨텐츠

본문 제목

Quartz를 이용한 스케쥴링

JAVA Tip

by cookieangelo 2024. 3. 5. 09:39

본문

Quartz는 자바 기반의 오픈 소스 스케줄링 라이브러리로, 다양한 환경에서 주기적 또는 특정 이벤트에 기반한 작업을 스케줄링할 수 있도록 도와줍니다. Quartz를 사용하여 스케줄링을 설정하고 관리하는 기본적인 단계는 다음과 같습니다

 

1. 의존성 추가

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

maven 추가

 


dependencies {
  implementation("org.springframework.boot:spring-boot-starter-quartz:3.2.2")
}

build.gradle 추가

 

2. Job 클래스 작성: 스케줄링할 작업에 해당하는 Job 클래스를 작성합니다. 이 클래스는 org.quartz.Job 인터페이스를 구현해야 합니다.

 

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 스케줄링할 작업 내용 구현
        System.out.println("스케줄링된 작업 실행");
    }
}

 

3. Trigger 및 Scheduler 설정: Quartz에서는 Trigger와 Scheduler를 사용하여 작업을 스케줄링합니다. Trigger는 언제 작업을 실행할지를 정의하고, Scheduler는 Trigger와 Job을 연결하여 스케줄링을 관리합니다.

 

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzExample {
    public static void main(String[] args) throws SchedulerException {
        // JobDetail 생성
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob", "group1")
                .build();
                jobDetail.getJobDataMap().put("id", "I_23");
 

        // Trigger 생성 
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .startNow()
                .withSchedule(CronScheduleBuilder.cronSchedule("15 * * * * ?"))
                .build();

        // Scheduler 생성 및 Job과 Trigger 등록
        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        // MyJobListner 인스턴스 생성및 스케쥴러에 등록
        scheduler.getListenerManager().addJobListener(new MyJobListner());	
        scheduler.scheduleJob(jobDetail, trigger);
    }
}

 

4.Listener : JobListener를 구현하려면, JobListener 인터페이스를 구현하고 해당 메서드를 오버라이드해야 합니다. JobListener는 Quartz에서 실행되는 작업(Job)에 대한 이벤트를 수신하는 데 사용됩니다

 


import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyJobListner implements JobListener {

    @Override
    public String getName() {
        return ScheduleListnerUtl.class.getName();
    }

    /**
     * Job이 수행되기 전 상태
     */
    @Override
    public void jobToBeExecuted(JobExecutionContext context) {
      String jobName = context.getJobDetail().getKey().getName();
      System.out.println("Job " + jobName + " is about to be executed");
    }

    /**
     * Job이 중단된 상태
     */
    @Override
    public void jobExecutionVetoed(JobExecutionContext context) {
        String jobName = context.getJobDetail().getKey().getName();
        System.out.println("Job " + jobName + " execution has been vetoed");
    }

    /**
     * Job 수행이 완료된 상태
     */
    @Override
    public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
        String jobName = context.getJobDetail().getKey().getName();
        System.out.println("Job " + jobName + " was executed");
    }
}

'JAVA Tip' 카테고리의 다른 글

cron 표현식  (0) 2024.03.13
Spring Boot 에서 LogBack 설정  (0) 2024.03.08
frontend-maven-plugin 사용 빌드  (0) 2024.03.07
Jasypt 이용한 properties DB 암호화  (0) 2024.03.06
hikari 를 이용한 DB Connection  (0) 2024.03.05

관련글 더보기