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");
}
}
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 |