관리 메뉴

Life goes slowly...

[Java] Struts2의 scheduler 시스템 - Quartz2 Library 본문

프로그래밍/Java

[Java] Struts2의 scheduler 시스템 - Quartz2 Library

빨강소 2020. 10. 11. 01:07
728x90
반응형

Struts2의 Quartz Library 

자바(Java) 프레임워크 중 하나인 Struts2 프로그래언어로 개발되어 어느 프로그램에서도 쉽게 통합하여 개발 가능한 오픈형 라이브러리입니다. Quartz 라이브러리는 수십에서 수천 개의 작업도 실행 가능하며 간단한 interval 형식이나 Cron 표현식으로 복잡한 스케쥴러 시스템도 지원 가능합니다.

 

장점 :

- DataBase 기반으로 스케줄러 간의 Clustering 기능을 제공합니다.

- 시스템 Fail-over 와 Random 방식의 로드 분산처리를 지원합니다.

- 여러 기본 Plug-in을 제공합니다.

- ShutdownHookPlugin - JVM 종료 이벤트를 캐치해서 스케줄러에게 종료를 알려줍니다.

 

단점 :

- Clustering 기능을 제공합니다. 하지만, 단순한 random 방식이라서 완벽한 Cluster 간의 로드 분산은 불가능합니다.

- 어드민 UI을 제공하지 않습니다.

- Fixed Delay 타입을 보장하지 않고 추가 작업이 필요합니다.

 


 

 

1. Quartz Library 다운로드하여 적용

http://www.quartz-scheduler.org/downloads/

 

Downloads

 

www.quartz-scheduler.org

 

lib 디렉토리 하위에 있는 jar 파일을 class path에 적용

 

2. Quartz Servlet 설정 추가 (web.xml)
<listener>
  <listener-class>kr.com.web.daemon.daemonListener</listener-class>
 </listener>

 

3. Quartz properties 파일 추가 (quartz.properties)
// 스케줄러의 이름 설정 
org.quartz.scheduler.instanceName = SchedulerInit 
// 스레드 풀의 수 설정(최대 동시 작업을 실행할 수 있는 수) 
org.quartz.threadPool.threadCount = 5
// 작업 및 트리거의 세부 정보 등 Quartz의 모든 Data는 DB가 아닌 메모리에 보관 
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

 

4. web.xml 파일에 설정 Scheduler Class 파일
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import kr.com.web.daemon.DaemonAction;

public class daemonListener implements ServletContextListener {
	public void contextInitialized(ServletContextEvent arg0) {
		JobDetail job = JobBuilder.newJob(DaemonAction.class).withIdentity("anyJobName", "group1").build();
		try {
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity("anyTriggerName", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?")).build();
            
            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.start();
            scheduler.scheduleJob(job, trigger);
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}
}

 

5. Job Class 작성
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class DaemonAction implements Job {
	public void execute(JobExecutionContext context) throws JobExecutionException{
		System.out.println("5분에 한번씩 도는 데몬 작성 Test중...");
	}
}

 

6. Scheduler 수행 설정 (Cron Trigger)

- Unix및 Linux의 cron tab의 표현식과 동일하고 기본 표현식은 "초 분 시 일 월 요일 연도(옵션)"으로 설정

 

728x90
반응형
Comments