728x90
반응형

Quartz 스케줄러 사용하기

2009/08/04 20:08 from 분류없음
주기적으로 디비에 어떤 데이터를 쌓거나 시간대별로 특정한 작업을하려면 데몬을 돌려야 하는데
간단하게 사용할수 있는 데몬입니다.
Quartz Scheduler http://www.quartz-scheduler.org/

0. 쿼츠 다운로드 : http://www.opensymphony.com/quartz/download.action
다운로드 받고 안에있는 quartz-1.6.5.jar을 라이브러리에 추가
  
1. 서버 구동시 자동으로 쿼츠가 실행되도록 WEB-INF/web.xml 에 추가  (quartz.properties, SchedulerInit.java 경로확인!!)
  1. <!-- Quartz 로딩부분  -->    
  2.     
  3.   <servlet>  
  4.     <display-name>Quartz Initializer Servlet</display-name>  
  5.     <servlet-name>QuartzInitializer</servlet-name>  
  6.     <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>  
  7.     <init-param>  
  8.       <param-name>config-file</param-name>  
  9.       <param-value>com/ineast/scheduler/quartz.properties</param-value>  
  10.     </init-param>  
  11.     <init-param>  
  12.       <param-name>shutdown-on-unload</param-name>  
  13.       <param-value>true</param-value>  
  14.     </init-param>  
  15.     <init-param>  
  16.       <param-name>start-scheduler-on-load</param-name>  
  17.       <param-value>true</param-value>  
  18.     </init-param>  
  19.     <load-on-startup>1</load-on-startup>  
  20.   </servlet>  
  21.     
  22.   <servlet>  
  23.     <display-name>SchedulerInit</display-name>  
  24.     <servlet-name>SchedulerInit</servlet-name>  
  25.     <servlet-class>com.ineast.scheduler.SchedulerInit</servlet-class>  
  26.     <load-on-startup>2</load-on-startup>  
  27.   </servlet>  
  28.   <servlet-mapping>  
  29.     <servlet-name>SchedulerInit</servlet-name>  
  30.     <url-pattern>/SchedulerInit</url-pattern>  
  31.   </servlet-mapping>  
  32.     

2.quartz.properties
 
  1. org.quartz.scheduler.instanceName = SchedulerInit  
  2. org.quartz.scheduler.instanceId = AUTO  
  3. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  
  4. org.quartz.threadPool.threadCount = 12  
  5. org.quartz.threadPool.threadPriority = 5  
  6. org.quartz.jobStore.misfireThreshold = 60000  
  7. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore  


3. 이니셜라이저 부분 ( SchedulerInit.java )
  1. package com.ineast.scheduler;  
  2.   
  3. import java.text.ParseException;  
  4. import org.quartz.CronTrigger;  
  5. import org.quartz.JobDetail;  
  6. import org.quartz.Scheduler;  
  7. import org.quartz.SchedulerException;  
  8. import org.quartz.SchedulerFactory;  
  9. import org.quartz.impl.StdSchedulerFactory;  
  10.   
  11. public class SchedulerInit {  
  12.   private SchedulerFactory schedFact;  
  13.   private Scheduler sched;  
  14.   
  15.   public SchedulerInit() {  
  16.     try {  
  17.       schedFact = new StdSchedulerFactory();  
  18.       sched = schedFact.getScheduler();  
  19.       sched.start();  
  20.   
  21.        //"job이름, 그룹명, 동작시킬Class"  
  22.       JobDetail job1 = new JobDetail("Job_MyAlarmData1""group1", Job_MyAlarmData.class);   
  23.        // 매분 0초에 동작(30초마다 동작시키려면 job을 하나더 만들고 아래에 0대신 30을 넣으면 ok  
  24.       CronTrigger trigger1 = new CronTrigger("Trigger_MyAlarmData1""group1""0 * * * * ?");   
  25.       sched.scheduleJob(job1, trigger1);  
  26.         
  27.     } catch (SchedulerException e) {  
  28.       e.printStackTrace();  
  29.     } catch (ParseException e) {  
  30.       e.printStackTrace();  
  31.     }  
  32.   }  
  33.   
  34.   public static void main(String[] args) {  
  35.     new SchedulerInit();  
  36.   }  
  37. }  


4. 사용자 로직부분
  1. package com.ineast.scheduler;  
  2.   
  3. import java.util.Hashtable;  
  4. import java.util.Vector;  
  5. import com.ineast.common.DbParent;  
  6. import com.ineast.common.UtilBean;  
  7. import personal.MyAlarmBean;  
  8. import java.util.Date;  
  9.   
  10. import org.quartz.Job;  
  11. import org.quartz.JobExecutionContext;  
  12. import org.quartz.JobExecutionException;  
  13.   
  14. public class Job_MyAlarmData extends DbParent implements Job { //DbParent상속받은 상태  
  15.     
  16.   public void execute(JobExecutionContext context) throws JobExecutionException {  
  17.     getMyAlarmData(); //이부분에 로직을 작성  
  18.   }  
  19.     
  20.   public void getMyAlarmData() {  
  21.      System.out.println("우왕ㅋ굳ㅋ");  
  22.   }  
  23.     
  24. }  


Job이 DB에서 읽어온값을 Bean에있는 Static Hashtable에 주기적으로 업데이트 시킬 필요가 있었는데
Static 객체에 바로 접근이 가능한걸보니 WAS프로세스 안에서 돌아가는 것으로 보인다.


작업주기 설정하는건 아래링크에보시면 있음~
http://blog.naver.com/kjh28480?Redirect=Log&logNo=70048565972

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,