본문 바로가기
IT/Java

Quartz 스케줄러 사용하기

by 어느 개발자의 블로그 2020. 6. 15.
728x170

주기적으로 디비에 어떤 데이터를 쌓거나 시간대별로 특정한 작업을하려면 데몬을 돌려야 하는데
간단하게 사용할수 있는 데몬입니다.

0. 쿼츠 다운로드 : http://www.opensymphony.com/quartz/download.action
다운로드 받고 안에있는 quartz-xxx.jar을 라이브러리에 추가

(Java 1.4를 사용하고 있어서 quartz-all-1.6.0.jar 를 추가였음)
  
1. 서버 구동시 자동으로 쿼츠가 실행되도록 WEB-INF/web.xml 에 추가  (quartz.properties, SchedulerInit.java 경로확인!!) 

 

  <!-- Quartz loading  -->

  <servlet>    

    <servlet-name>QuartzInitializer</servlet-name>  

    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>  

    <init-param>  

      <param-name>config-file</param-name>  

      <param-value>com/Scheduler/quartz.properties</param-value>  

    </init-param>  

    <init-param>  

      <param-name>shutdown-on-unload</param-name>  

      <param-value>true</param-value>  

    </init-param>  

    <init-param>  

      <param-name>start-scheduler-on-load</param-name>  

      <param-value>true</param-value>  

    </init-param>  

    <load-on-startup>1</load-on-startup>  

  </servlet>  

  <servlet>  

    <servlet-name>SchedulerInit</servlet-name>  

    <servlet-class>com.Scheduler.SchedulerInit</servlet-class>  

    <load-on-startup>2</load-on-startup>  

  </servlet>  

  <servlet-mapping>  

    <servlet-name>SchedulerInit</servlet-name>  

    <url-pattern>/SchedulerInit</url-pattern>  

 

  </servlet-mapping> 

 

2.quartz.properties 

 

org.quartz.scheduler.instanceName = SchedulerInit

org.quartz.scheduler.instanceId = AUTO

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 10

org.quartz.threadPool.threadPriority = 5

org.quartz.jobStore.misfireThreshold = 60000

 

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore


3. 이니셜라이저 부분 ( SchedulerInit.java ) 

 

package com.Scheduler;

 

import java.text.ParseException;

 

import javax.servlet.http.HttpServlet;

 

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.SchedulerFactory;

import org.quartz.impl.StdSchedulerFactory;

 

import com.Scheduler.Job.JobGroup1;

 

public class SchedulerInit extends HttpServlet {

 

    private static final long serialVersionUID = 1L;

    private SchedulerFactory schedFact;

    private Scheduler sched;

 

    public SchedulerInit() {

        try {

            schedFact = new StdSchedulerFactory();

            sched = schedFact.getScheduler();

            sched.start();

 

            // "job이름, 그룹명, 동작시킬Class"

            JobDetail job1 = new JobDetail("JobGroup1", "Group1", JobGroup1.class);

            

            // 기본표현식: "초 분 시 일 월 요일 년도(옵션)"

            CronTrigger trigger1 = new CronTrigger("JobGroup1", "Group1", "0 * * * * ?");

            sched.scheduleJob(job1, trigger1);

 

        } catch (SchedulerException e) {

            e.printStackTrace();

        } catch (ParseException e) {

            e.printStackTrace();

        }

    }

 

    public static void main(String[] args) {

        new SchedulerInit();

    }

}


4. 사용자 로직부분  

 

package com.Scheduler.Job;

 

import java.io.IOException;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.TimeZone;

 

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

  

public class JobGroup1 implements Job { 

    

  public void execute(JobExecutionContext context) throws JobExecutionException {  

      TimeZone tz;

      Date date = new Date();

      DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss (z Z)");

      DateFormat df_HHmm = new SimpleDateFormat("HH:mm");

 

      tz = TimeZone.getTimeZone("Asia/Seoul"); 

      df.setTimeZone(tz);

      df_HHmm.setTimeZone(tz);

      System.out.println("현재 시간 : " + df.format(date)); 

      

      if("16:01".equals(df_HHmm.format(date))){

        // 매일 특정 시간에 실행..

      }

      

  }  

  

}

반응형
그리드형

'IT > Java' 카테고리의 다른 글

Java 인증서 추가 방법 ( SunCertPathBuilderException 해결 )  (0) 2021.10.27

댓글