JAVA에서 Spring 타이머의 두 가지 실현 방식

5021 단어 javaspring타이머
현재 두 가지 유행하는 스프링 타이머 설정이 있는데 그것이 바로 자바의 Timer 클래스와 OpenSymphony의 Quartz이다.
1. Java Timer 시간
우선 자바를 계승하겠습니다.util.TimerTask 클래스 실행 방법

import java.util.TimerTask;  
public class EmailReportTask extends TimerTask{  
  @Override  
  public void run() {  
    ...  
  }   
}
스프링에서 정의
...
Spring 타이머 구성

<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">  
<property name="timerTask" ref="reportTimerTask" />  
<property name="period">  
<value>86400000value>  
property>  
bean> 
timerTask 속성은 ScheduledTimerTask가 실행되는 항목을 알려줍니다.86400000은 24시간
스프링 타이머 시작
Spring의 TimerFactory Bean은 가동 시 작업을 담당합니다.

<bean class="org.springframework.scheduling.timer.TimerFactoryBean">  
<property name="scheduledTimerTasks">  
  <list><ref bean="scheduleReportTask"/>list>  
property>  
bean> 
scheduledTimerTasks에 시작할 타이머 작업의 목록이 표시됩니다.
delay 속성을 설정하여 시작 지연

<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">  
<property name="timerTask" ref="reportTimerTask" />  
<property name="period">  
<value>86400000value>  
property>  
<property name="delay">  
<value>3600000value>  
property>  
bean>  
이 임무는 우리가 24시간 간격으로 한 번 운행할 수 있도록 규정할 수 있을 뿐, 어느 때까지는 정확하게 시작할 수 없다
2. Quartz 타이머
우선 Quartz JobBean 클래스를 계승하여 execute Internal을 실현하는 방법입니다.

import org.quartz.JobExecutionContext;  
import org.quartz.JobExecutionException;  
import org.springframework.scheduling.quartz.QuartzJobBean;  
public class EmailReportJob extends QuartzJobBean{  
protected void executeInternal(JobExecutionContext arg0)  
throws JobExecutionException {  
...  
}  
}
Spring에서 정의

<bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean">  
<property name="jobClass">  
<value>EmailReportJobvalue>  
property>  
<property name="jobDataAsMap">  
  <map>  
    <entry key="courseService">  
      <ref bean="courseService"/>  
      entry>  
  map>  
property>  
bean> 
여기에서 우리는 이메일 보고서 Job Bean을 직접 성명하지 않고 Job Detail Bean을 성명했다.이것은 Quartz의 특징입니다.JobDetail Bean은 Quartz의 org입니다.quartz.JobDetail의 하위 클래스입니다. jobClass 속성을 통해 Job 대상을 설정해야 합니다.
Quartz를 사용하는 JobDetail의 또 다른 특이한 점은 Email Report Job의course Service 속성이 간접적으로 설정되어 있다는 것이다.JobDetail의 jobDataAsMap 속성은 jobClass에 설정된 각종 속성을 포함하여 맵을 받아들입니다.JobDetailBean이 실례화되면 Course Service Bean을 Email Report Job의 course Service 속성에 주입합니다.
타이머 시작
Quartz의 org.quartz.Trigger 클래스는 Quartz 작업을 언제, 어떤 주파수로 실행하는지 설명합니다.스프링은 두 개의 트리거인 Simple Trigger Bean과 Cron Trigger Bean을 제공합니다.
Simple Trigger Bean은 scheduled TimerTasks와 유사합니다.작업의 실행 빈도를 지정하고 scheduledTimerTasks 설정을 모방합니다.

<bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
<property name="jobDetail" ref="reprotJob" />  
<property name="startDelay">  
<value>360000value>  
property>  
<property name="repeatInterval">  
  <value>86400000value>  
property>  
bean>
start Delay도 1시간 지연 시작
CronTriggerBean의 정확한 작동 시간 지정

<bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
<property name="jobDetail" ref="reprotJob" />  
<property name="cronExpression">  
<value>0 0 6 * * ?value>  
property>  
bean> 
속성 cronExpression은 트리거할 시기를 알려 줍니다.가장 신비로운 것은 크론 표현식이다.
Linux 시스템의 계획 작업은 보통 cron이 맡는다.cron 표현식은 공백으로 구분된 시간 요소가 최소 6개 (또는 7개) 있습니다.왼쪽에서 오른쪽:
1초 2.나누다시간월의 날짜(1-31)5.월(1-12 또는 JAN-DEC) 6.요일 날짜(1-7 또는 SUN-SAT) 7.년도(1970-2099)
각 요소에 지정된 값 (예: 6), 구간 (9-12), 목록 (9, 11, 13) 또는 와일드카드 (*) 이 표시됩니다.4와 6이라는 두 요소는 서로 배척되기 때문에 물음표(?)를 설정해야 한다설정하지 않으려는 필드를 나타냅니다. "/"값이 조합되면 반복 횟수를 나타냅니다. (10/6은 10초당 6회를 나타냅니다.)
타이머 시작

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  <property name="triggers">  
    <list><ref bean="cronReportTrigger"/>list>  
  property>  
bean> 
triggers 속성은 트리거를 받아들입니다.
자, 본문의 내용은 여기까지 끝났습니다. 잘 썼죠? 부족한 점이 있습니다. 대협들이 귀중한 의견을 제시한 것을 환영합니다.

좋은 웹페이지 즐겨찾기