타이머 구현, 자바 타이머 타이머 와 Quartz 소개 및 Spring 타이머 설정

1 타이머 의 역할 은 실제 개발 에서 프로젝트 에서 정기 적 으로 실행 하거나 일정한 작업 을 반복 해 야 한다 면 타이머 가 특히 중요 하 다.물론 우리 가 타 이 머 를 모 르 면 스 레 드 로 이 루어 집 니 다. 예 를 들 어:
package org.lzstone.action
public class FinanceAction extends Thread{
       private Date date;
       public void run{
           try{
               while(true){
               Thread.sleep((int)(Math.random()*1000));
           date = new Date();
       //      
               }
           }catch(Exception e){
                e.printStackTrace();
           }
        }
}

자신 이 타 이 머 를 실현 하 는 작업 은 매우 복잡 합 니 다. 메모리 사용량 이 너무 많 지 않 으 면 시스템 이 Over 되 기 때문에 정시 에 실행 하거나 반복 하 는 작업 을 처리 합 니 다.타 이 머 는 좋 은 선택 입 니 다. 2. 자바 에서 흔히 볼 수 있 는 타 이 머 1) 자바. util. Timer 를 통 해 2) OpenSymphony 커 뮤 니 티 가 제공 하 는 Quartz 를 실현 합 니 다.
package org.lzstone.action
import java.util.TimeTask
public class LzstoneTimeTask extends TimeTask{
       public void run(){
              //        
       }
}

2) 정시 작업 을 실행 하고 정시 작업 을 실행 하 는 것 은 두 가지 방식 으로 나 뉜 다. 2.1) 프로그램 은 예시 코드 를 직접 시작한다.
package org.lzstone.action
public class LzstoneMain{
       .......
       public void run(){
        //        
        //    
        Timer timer = new Timer();
          :
        new LzstoneTimeTask()-        。
        0-           ,     。
        1*1000-               ,     。
        timer.schedule(new LzstoneTimeTask(),0,1*1000);
       }
}

2.2) 웹 감청 방식 예시 코드:
package org.lzstone.action
public class LzstoneMain implements ServletContextListener{
       private Timer timer = null;
       //      ,    ,    
       public void contextInitialized(ServletContextEvent event){
               timer = new Timer();
               timer.schedule(new LzstoneTimeTask(),0,1*1000);
       }
       //     ,      
       public void contextDestroyed(ServletContextEvent event){
              //  ,               run         ,                             。
              timer.cancel();
        }
}

웹. xml 설정
<listener>
   <listener-class>
        org.lzstone.action.LzstoneMain
   listener-class>
listener>
  • Quartz Quartz 는 OpenSymphony 오픈 소스 조직 이 Job scheduling 분야 에서 또 하나의 오픈 소스 프로젝트 로 간단 하거나 복잡 한 정시 임 무 를 만 들 수 있 고 Quartz 를 이용 하여 정시 임 무 를 개발 하 는 절 차 는 Timer 와 유사 하 다 고 소개 했다.Quartz 를 이용 하여 정시 임 무 를 개발 하 는 것 은 주로 두 단계 로 나 뉜 다. 1) 정시 임무 류 예제 코드 를 만 드 는 것 이다.
  • package org.lzstone.action
    public class LzstoneTimeTask implements Job{
           public void execute(JobExecutionContext context) throws JobExecutionException{
                  //        
           }
    }

    2) 정시 작업 을 실행 하고 정시 작업 을 실행 하 는 것 은 두 가지 방식 으로 나 뉜 다. 2.1) 프로그램 이 직접 시작 하여 작업 스케줄 러 를 만 들 고 해당 하 는 작업 계획 예제 코드 를 설정 합 니 다.
    package org.lzstone.action
    public class LzstoneMain{
           private static Scheduler sched;
           public static void run() throws Exception{
                  //  LzstoneTimeTask     
                  JobDetail jobDetail = new JobDetail("lzstoneJob",sched.DEFAULT_GROUP,LzstoneTimeTask.class);
                  //         
                  CronTrigger trigger = new CronTrigger("lzstoneTrigger","lzstone","0 0 12 * * ?");
                  //0 0 12 * * ?        12   
                  sched = new org.quartz.impl.StdSchedulerFactory().getScheduler();
                  sched.scheduleJob(jobDetail,trigger);
                  sched.start();
           }
           //  
           public static void stop() throws Exception{
                  sched.shutdown();
            }
    }

    / / 실행
    public class Main{
           .............
           public void run(){
                LzstoneMain.run();
           }
           ............
    }

    2.2) 웹 감청 방식 예시 코드:
    package org.lzstone.action
    public class LzstoneMainListener implements ServletContextListener{
           private Timer timer = null;
           //      ,    ,    
           public void contextInitialized(ServletContextEvent event){
                   LzstoneMain.run();
           }
           //     ,      
           public void contextDestroyed(ServletContextEvent event){
                  LzstoneMain.stop();
            }
    }

    웹. xml 설정
    <listener>
       <listener-class>
            org.lzstone.action.LzstoneMainListener
       listener-class>
    listener>

    5. 타이머 방식 에 비해 타 이 머 를 실현 하고 원리 가 간단 하 며 실현 이 편리 하 며 간단 한 임 무 를 수행 하 는 데 편리 하 다. 부족 한 점 은 집행 시간 을 확정 할 수 없고 의존성 이 비교적 강하 기 때문에 반드시 지 정 된 Quartz 방식 을 계승 하여 타 이 머 를 실현 해 야 한다. 편리 하고 명확 하 게 시동 시간 을 지정 해 야 한다. 타 이 머 는 비교적 유연 하고 복잡 한 타 이 머 를 실현 하기 쉽다.부족 한 점 은 특정한 인 터 페 이 스 를 실현 하고 그 프레임 워 크 를 불 러 오 는 두 가지 방식 이 각각 장단 점 이 있 으 며 특정한 상황 에서 그 특징 에 따라 선택 하여 사용 할 수 있다 는 것 이다.6. Spring 정시 퀘 스 트 Spring 정시 퀘 스 트 는 Timer 와 Quartz 에 지원 을 제공 하고 절차 가 기본적으로 같 습 니 다. 먼저 Spring 이 Timer 에 대한 지원 1.1 을 설정 하여 정시 퀘 스 트 클래스 를 만 듭 니 다.
    package org.lzstone.action
    import java.util.TimeTask
    public class LzstoneTimeTask extends TimeTask{
           public void run(){
                  //        
           }
    }

    1.2 정시 작업 클래스 를 등록 하고 작업 계획 과 작업 스케줄 러 를 설정 하여 프로젝트 의 WEB - INF 아래 TimerConfig. xml 파일 을 만 듭 니 다 (일반적으로 applicationContext. xml 라 고 합 니 다)
    
    
    <beans>
    <bean>
    
    <bean id="lzstoneTimeTask" class="org.lzstone.action.LzstoneTimeTask"/>
    
    <bean id="taskInfo" class="org.springframework.scheduling.timer.ScheduledTimerTask">
    
    <property name="delay">
    <value>3000value>
    property>
    
    <property name="period">
      <value>4000value>
    property>
    
    <property name="timerTask">
    <ref local="lzstoneTimeTask"/>
    property>
    bean>
    
    <bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
    
    <property name="scheduledTimerTasks">
        <list>
            <ref local="taskInfo"/>
            ........
        list>
    property>
    bean>
    beans>

    1.3 웹 프로젝트 의 시작 설정
     <context-param>
          <param-name>contextConfigLocationparam-name>
          <param-value>/WEB-INF/TimerConfig.xmlparam-value>
         context-param>
    
         <listener>
             <listener-class>
                      org.springframework.web.context.ContextLoaderListener
             listener-class>
         listener>

    Spring 의 Quartz 지원 2.1 을 설정 하여 정시 작업 클래스 를 만 듭 니 다.
    package org.lzstone.action
    public class LzstoneQuartzTask{
           public void execute(){
                  //        
           }
    }

    2.2 정시 작업 클래스 를 등록 하고 작업 계획 과 작업 스케줄 러 를 설정 하여 프로젝트 의 WEB - INF 아래 에 QuartzConfig. xml 파일 을 만 듭 니 다 (일반적으로 applicationContext. xml 라 고 합 니 다)
    
    
    <beans>
    <bean>
    
    <bean id="lzstoneQuartzTask" class="org.lzstone.action.LzstoneQuartzTask"/>
    
    <bean id="taskInfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    
    <property name="targetObject">
    <ref local="lzstoneQuartzTask"/>
    property>
    
    <property name="targetMethod">
    <value>executevalue>
    property>
    bean>
    
    <bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    
    <property name="jobDetail">
        <ref local="taskInfo"/>
    property>
    
    <property name="cronExpression">
        <value>0 0 12 * * ?value>
    property>
    bean>
    
    <bean id="registerQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    
    <property name="triggers">
        <list>
              <ref local="quartzTrigger"/>
        list>
    property>
    bean>
    beans>

    2.3 웹 프로젝트 의 시작 설정
    <context-param>
          <param-name>contextConfigLocationparam-name>
          <param-value>/WEB-INF/QuartzConfig.xmlparam-value>
         context-param>
    
         <listener>
             <listener-class>
                      org.springframework.web.context.ContextLoaderListener
             listener-class>
         listener>
    

    좋은 웹페이지 즐겨찾기