<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java Blog for Alex Wan

    Let life be beautiful like summer flowers and death like autumn leaves.

    統計

    留言簿(10)

    BlogJava

    Blogs

    DIV+CSS

    JQuery相關

    友情鏈接

    常去的地方

    數據供應

    閱讀排行榜

    評論排行榜

    spring框架使用任務調度quartz的例子-TriggerListener 篇

            有時候我們的任務(Job)需要再某些任務完成之后才能進行;例如從舊的數據庫批量導數據的時候;需要現將被其他數據依賴的數據導入新的數據庫;然后再進行關系的導入.。在這種情況下我們就可以使用Quartz的listener來做文章了。
            首先我們寫一個主任務的類,命名為MainJob;她的作用是作為一系列任務的開始點。
    MainJob.java
    package jobs;

    import org.apache.log4j.Logger;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.scheduling.quartz.QuartzJobBean;

    public class MainJob extends QuartzJobBean {
        
    private  Logger logger = Logger.getLogger(getClass());
        @Override
        
    protected void executeInternal(JobExecutionContext arg0)
                
    throws JobExecutionException {
            
    // TODO Auto-generated method stub
            logger.debug("Just say hi.");
        }


    }


            然后我們新建另外一個任務(SecondJob)作為后續(xù)任務:
    SecondJob.java
    package jobs;

    import org.apache.log4j.Logger;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.scheduling.quartz.QuartzJobBean;

    public class SecondJob extends QuartzJobBean {
        
    private  Logger logger = Logger.getLogger(getClass());
        @Override
        
    protected void executeInternal(JobExecutionContext arg0)
                
    throws JobExecutionException {
            
    // TODO Auto-generated method stub
            logger.debug("I'm the second job.");
        }


    }
            創(chuàng)建一個TriggerListener,重寫其triggerComplete方法,并且添加一些方便spring注入的屬性和方法。
    NextJobTriggerListener.java
    package listeners;

    import org.apache.log4j.Logger;
    import org.quartz.JobDetail;
    import org.quartz.JobExecutionContext;
    import org.quartz.Scheduler;
    import org.quartz.Trigger;
    import org.quartz.listeners.TriggerListenerSupport;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    import org.springframework.scheduling.quartz.SimpleTriggerBean;

    public class NextJobTriggerListener extends TriggerListenerSupport {
        
    private  Logger logger = Logger.getLogger(getClass());
        
    private String name;
        
    public String getName() {
            
    return this.name;
        }

        
    public void setName(String name)
        
    {
            
    this.name=name;
        }

        
    private SimpleTriggerBean nextTrigger;
        
    public void setNextTrigger(SimpleTriggerBean nextTrigger) {
            
    this.nextTrigger = nextTrigger;
        }

        @Override
        
    public void triggerComplete(Trigger trigger, JobExecutionContext context, int code) {
            
    try{
            Scheduler schduler
    =context.getScheduler();
            JobDetail nextJob
    =nextTrigger.getJobDetail();
            
    //查找名稱和即將加入的任務一樣的任務
            JobDetail oldJob=schduler.getJobDetail(nextJob.getName(),nextJob.getGroup());
            
    //查找名稱和即將加入的觸發(fā)器一樣的觸發(fā)器
            Trigger oldTrigger=schduler.getTrigger( nextTrigger.getName(),nextTrigger.getGroup());
            
            
    if(oldJob==null&&oldTrigger==null)//同名的任務和觸發(fā)器都不存在
            {
                logger.debug(
    "inside scheduleJob."+code);
                schduler.scheduleJob(nextJob,nextTrigger);
            }
    else//同名的任務或觸發(fā)器
            {
                
                logger.debug(
    "oldJob==null:"+(oldJob==null));
                logger.debug(
    "oldTrigger==null:"+(oldTrigger==null));    
            }

            
    super.triggerComplete(trigger, context, code);
            }
    catch(Exception e)
            
    {
                e.printStackTrace();
            }

        }

        

    }


            配置spring 的applicationContext.xml
    applicationContext.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:jee
    ="http://www.springframework.org/schema/jee"
        xsi:schemaLocation
    ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
               http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"
    >
       
    <!-- 主任務 -->
        
    <bean id="mainJob"
            class
    ="org.springframework.scheduling.quartz.JobDetailBean">
            
    <!-- 運行的類 -->
            
    <property name="jobClass">
                
    <value>jobs.MainJob</value>
            
    </property>
        
    </bean>
        
        
    <!-- 主任務的監(jiān)聽器 -->
        
    <bean id="mainTriggerListener"
                    class
    ="listeners.NextJobTriggerListener">
                    
    <!-- 下個觸發(fā)器 -->
                    
    <property name="nextTrigger" ref="secondTrigger"></property>
                    
    <!-- 監(jiān)聽器名稱 -->
                    
    <property name="name" value="mainTriggerListener"></property>
        
    </bean>


        
    <!-- 主任務的觸發(fā)器 -->
        
    <bean id="mainTrigger"
            class
    ="org.springframework.scheduling.quartz.SimpleTriggerBean">
            
    <property name="jobDetail">
                
    <!-- 上面創(chuàng)建的任務調度對象 -->
                
    <ref bean="mainJob" />
            
    </property>
            
    <!-- 啟動60秒后執(zhí)行任務調度的excute方法 -->
            
    <property name="startDelay">
                
    <value>6000</value>
            
    </property>
            
    <!-- 運行次數 -->
            
    <property name="repeatCount">
                
    <value>0</value>
            
    </property>
            
    <!-- 隔一個小時運行一次(貌似多余,不寫會報錯) -->
            
    <property name="repeatInterval">
                
    <value>3600000</value>
            
    </property>
            
    <property name="triggerListenerNames">
                
    <list>
                    
    <value>mainTriggerListener</value>
                
    </list>
            
    </property>
        
    </bean>
        
        
    <!-- 后續(xù)任務 -->
        
    <bean id="secondJob"
            class
    ="org.springframework.scheduling.quartz.JobDetailBean">
            
    <!-- 運行的類 -->
            
    <property name="jobClass">
                
    <value>jobs.SecondJob</value>
            
    </property>
        
    </bean>

        
    <!-- 后續(xù)任務的觸發(fā)器 -->
        
    <bean id="secondTrigger"
            class
    ="org.springframework.scheduling.quartz.SimpleTriggerBean">
            
    <property name="jobDetail">
                
    <!-- 上面創(chuàng)建的任務調度對象 -->
                
    <ref bean="secondJob" />
            
    </property>
            
    <!-- 啟動6秒后執(zhí)行任務調度的excute方法 -->
            
    <property name="startDelay">
                
    <value>6000</value>
            
    </property>
            
    <!-- 運行次數 -->
            
    <property name="repeatCount">
                
    <value>0</value>
            
    </property>
            
    <!-- 隔一個小時運行一次(貌似多余,不寫會報錯) -->
            
    <property name="repeatInterval">
                
    <!-- 
                <value>3600000</value>
                 
    -->
                 
    <value>6000</value> 
            
    </property>
        
    </bean>
        
        
    <!-- 任務調度工廠類 -->
        
    <bean
            
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            
    <!-- 這一部分的配置不用管 -->
            
    <property name="quartzProperties">
                
    <props>
                    
    <prop key="org.quartz.threadPool.class">
                        org.quartz.simpl.SimpleThreadPool
                    
    </prop>
                    
    <prop key="org.quartz.threadPool.threadCount">10</prop>
                    
    <prop key="org.quartz.threadPool.threadPriority">
                        5
                    
    </prop>
                    
    <prop
                        
    key="org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread">
                        true
                    
    </prop>

                
    </props>
            
    </property>
            
    <!-- 觸發(fā)器,可以放一大堆觸發(fā)器 -->
            
    <property name="triggers">
                
    <list>
                    
    <!-- 在這里加 -->
                     
    <ref bean="mainTrigger"/>
                
    </list>
            
    </property>
            
    <property name="triggerListeners">
                
    <list>
                    
    <!-- 觸發(fā)器的監(jiān)聽器 -->
                    
    <ref bean="mainTriggerListener"/>
                
    </list>
            
    </property>
        
    </bean>
    </beans>
            開啟服務器,輸出
    DEBUG [MainJob.executeInternal(14)]  Just say hi.
    DEBUG 
    [NextJobTriggerListener.triggerComplete(38)]  inside scheduleJob.3
    DEBUG [SecondJob.executeInternal(14)] I'm the second job.
    DEBUG 
    [NextJobTriggerListener.triggerComplete(43)]  oldJob==null:false
    DEBUG 
    [NextJobTriggerListener.triggerComplete(44)]  oldTrigger==null:false

            另外這里一個任務只綁定了一個簡單的觸發(fā)器,這樣做是為了比較方便地可以檢測到任務完成的情況;至于任務的具體內容就任由大家發(fā)揮了。寫這篇文章希望能有人在其中獲得啟發(fā)。

    Let life be beautiful like summer flowers and death like autumn leaves.

    posted on 2008-06-12 08:42 Alexwan 閱讀(4080) 評論(1)  編輯  收藏 所屬分類: J2EE

    評論

    # re: spring框架使用任務調度quartz的例子-TriggerListener 篇 2014-04-11 17:35 最代碼

    最代碼網站上整理了你的代碼,地址:http://www.zuidaima.com/share/1775583461723136.htm
    有問題請回復  回復  更多評論   

    主站蜘蛛池模板: 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 日韩一级在线播放免费观看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲永久在线观看| 免费A级毛片无码A∨男男| 国内精品99亚洲免费高清| 亚洲性一级理论片在线观看| 国产一区二区三区无码免费| 人妻免费一区二区三区最新| 亚洲依依成人精品| 国产亚洲成归v人片在线观看| **实干一级毛片aa免费| 黄色一级免费网站| 亚洲国产精品成人综合久久久 | 精品国产免费人成电影在线观看 | 一级特级aaaa毛片免费观看| 亚洲网站视频在线观看| 亚洲国产高清精品线久久| 99热这里只有精品6免费| 男女啪啪免费体验区| 亚洲乱码一二三四区麻豆| 亚洲色偷偷狠狠综合网| 97在线观免费视频观看 | 波多野结衣免费视频观看| 99精品热线在线观看免费视频| 国产精品亚洲一区二区三区在线观看| 亚洲国产精品国自产电影| 又爽又黄无遮挡高清免费视频| 亚洲人成免费网站| a级成人毛片免费图片| 婷婷国产偷v国产偷v亚洲| 91亚洲精品自在在线观看| 亚洲国产精品成人精品无码区| 国产hs免费高清在线观看| 国产免费AV片在线播放唯爱网 | 免费在线观看a级毛片| 67194成是人免费无码| 91香蕉国产线观看免费全集| 精品无码一级毛片免费视频观看 | 亚洲AV无码1区2区久久| 亚洲真人日本在线|