프로그래밍/Spring Framework

Spring 스케쥴러 - QuartzJobBean

모지사바하 2011. 1. 5. 18:16
스프링은 크론과 같은 스케쥴러를 제공 한다.

일단

1. 스케쥴러로 작동될 클래스를 작성한다.

package com.login.service;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import com.dto.User;
import com.login.dao.LoginDAO;

public class QuartzService extends QuartzJobBean{

//QuartzJobBean 을 상속 받아야 한다.
 LoginDAO loginDAO;
 
 
 
 public void setLoginDAO(LoginDAO loginDAO) {
  this.loginDAO = loginDAO;
 }

 

 protected void executeInternal(JobExecutionContext jobExecutionContext)
 throws JobExecutionException {

// 이 메소드가 있는 부분이 실행될 부분이다.
  // 반복할 작업 구현
  User user   =  new User();
  user.setId("shonm");
 
  User confirmUser =  loginDAO.selectUser(user);
 
  System.out.println(confirmUser.getId()+"님 "+"비밀번호 "+confirmUser.getPw());
 }
}


2. 작성된 클래스를 xml에 설정하고 Quartz 설정을 해준다.
applicationContext-Quartz.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="
http://www.springframework.org/schema/tx"
 xsi:schemaLocation="
   
http://www.springframework.org/schema/beans
   
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://www.springframework.org/schema/aop
            
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
            http://www.springframework.org/schema/tx
            
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">


 <bean id="UserJob" class="org.springframework.scheduling.quartz.JobDetailBean">
  <!-- 실행시킬 클래스 -->
  <property name="jobClass" value="com.login.service.QuartzService"/>
  <property name="jobDataAsMap">
   <map>
    <entry key="loginDAO">
     <ref bean="loginDao"/><!-- 실행시킬 클래스의 DI -->
    </entry>
   </map>
  </property>
 </bean>
 

<!--
SimpleTriggerBean 과 CronTriggerBean 두가지를 쓸수 있는데 앞의 것은
몇분마다 실행 뭐 이럴 때 스는 것이고...
cronExpression은 매년 3월 2일 아니면 매일 새벽 1시 마다 실행등을 할 때 쓰인다.

SimpleTriggerBean 은 주기를 설정하는  property 로 repeatInterval 를 갖고
CronTriggerBean 은 주기를 설정하는 property 로 cronExpression 을 사용한다.

-->
 <bean id="UserTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
 <!--  bean id="UserTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">-->
  <property name="jobDetail" ref="UserJob"/>
 
     <!--  property name="cronExpression" value="0 0 1 * * ?"/>-->
     <!-- 초,분,시,일,월,주의 일,년 -->
     <!-- 매일 오전 1시에 실행됨 -->
    
     <!-- value는 1000 이 1초 -->
     <property name="repeatInterval" value="10000"></property>
 
 </bean>
 
<!--   trigger 를 장착하고 실행시킨다.-->
 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
  <property name="triggers">
   <list>
    <ref bean="UserTrigger"/>
   </list>
  </property>
  <property name="quartzProperties">
   <props>
    <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
    <prop key="org.quartz.threadPool.threadCount">5</prop>
    <prop key="org.quartz.threadPool.threadPriority">4</prop>
    <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
    <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
   
   </props>
  </property>
 </bean>
 
 
</beans>