Quartz 스케줄러
Quartz는 자바 기반의 오픈 소스 Job Scheduling 라이브러리입니다.
Java EE, Spring, Servlet, JSP, Hibernate, JPA 등 다양한 플랫폼에서 사용할 수 있습니다.
Job은 주로 대용량의 데이터를 처리하는 배치 작업이나 프로세스를 의미하고,
Scheduling은 특정한 시간이나 이벤트 발생 등의 조건을 만족할 시 Job을 자동으로 실행하는 것을 의미한다.
Quartz 제공 기능
- 단일 실행, 반복 실행, Cron 표현식을 사용하여 작업을 예약할 수 있습니다.
- 작업 실행을 위한 다양한 트리거를 제공합니다.
- 작업 실행을 위한 다양한 스케줄러를 제공합니다.
- 작업 실행을 위한 다양한 작업 실행기를 제공합니다.
Quartz 사용 방법
- Job을 생성하고,
- Scheduler에 Job과 Trigger(Job의 실행조건)을 달아주면,
- 조건에 따라서 Job이 실행됩니다.
+ JobListener, TriggerListener를 달아서 Job또는 Trigger가 실행될때마다 특정 함수를 실행시킬 수도 있습니다.
① 사용 준비
1.maven 플러그인 설치
https://mvnrepository.com/artifact/org.quartz-scheduler/quartz
원하는 버전 클릭해서 내용 드래그하여 복사
2. pom.xml
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
pom.xml에 org.quartz-scheduler 플러그인 붙여넣기
② JOB 생성
먼저 Job을 만들어보자. Job은 Job interface를 implements 받아서 만들어집니다
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MonitoringJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("**********job excute **********");
}
}
③ 스케줄러 등록을 위해 Main클래스에 코드 작성
1.SchedulerFactory 생성
// scheduler
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler scheduler = schedFact.getScheduler();
scheduler.start();
SchedulerFactory를 생성하고 Scheduler 개체를 가져옵니다. Scheduler는 작업 예약 및 실행을 담당하는 개체입니다.
2. JobDetail 객체 생성
JobDetail job = JobBuilder.newJob(DumbJob.class)
.withIdentity("DumbJob")
.build();
MonitoringJob 클래스에 대한 JobDetail 객체를 생성합니다. JobDetail 객체에는 작업 이름, 작업을 구현하는 클래스 등 작업에 대한 정보가 포함되어 있습니다.
3. Trigger 객체 생성
//trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("SystemMonitoring_Trigger")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMinutes(1) //every 1min
.repeatForever())
.build();
이 줄은 Trigger 객체를 생성합니다. Trigger 객체는 작업이 실행되어야 하는 시기를 지정합니다.
이 경우 트리거는 지금 시작되어 영원히 1분마다 실행되도록 설정됩니다.
4. Scheduler 사용
scheduler.scheduleJob(job, trigger);
스케줄러를 사용하여 작업을 예약합니다.
작업이 예약되면 지정된 시간과 간격으로 실행이 시작됩니다.
↓ 전체 코드
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
...
// scheduler
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler scheduler = schedFact.getScheduler();
scheduler.start();
//job detail
JobDetail job = JobBuilder.newJob(MonitoringJob .class)
.withIdentity("SystemMonitoring_Job")
.build();
//trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("SystemMonitoring_Trigger")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMinutes(1) //every 1min
.repeatForever())
.build();
scheduler.scheduleJob(job, trigger);
참고 출처 : https://wouldyou.tistory.com/94
https://heodolf.tistory.com/134
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] JSON to String / String to JSON (0) | 2023.11.07 |
---|---|
[JAVA] org.json.simple.JSONObject cannot be cast to net.sf.json.JSONObject (0) | 2023.11.06 |
[JAVA] 서버 CPU, MEMORY, DISK, IP 조회 방법 정리 (0) | 2023.09.19 |
[JAVA] 연산자 · 연산자우선순위 (0) | 2023.09.18 |
[JAVA] Cipher - 암호화 복호화 (0) | 2023.09.15 |