<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.

    統(tǒng)計

    留言簿(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 閱讀(4079) 評論(1)  編輯  收藏 所屬分類: J2EE

    評論

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

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

    主站蜘蛛池模板: 亚洲色欲或者高潮影院| 日韩成人毛片高清视频免费看| 成人毛片免费观看视频| 爱情岛论坛免费视频| 亚洲精品高清久久| 日本无卡码免费一区二区三区| 国产一级在线免费观看| 亚洲毛片免费视频| 亚洲成A∨人片天堂网无码| 日本xxxx色视频在线观看免费| 亚洲a∨无码精品色午夜| 亚洲av无码一区二区乱子伦as| 在线免费观看视频你懂的| a色毛片免费视频| 亚洲AV无码成人精品区日韩| 久久久久亚洲精品成人网小说| 成人午夜大片免费7777| 99ee6热久久免费精品6| 日本亚洲中午字幕乱码| 亚洲激情校园春色| 国产亚洲美女精品久久久2020| 毛片免费在线观看网址| 精品一卡2卡三卡4卡免费视频| 国产AV无码专区亚洲AV蜜芽| 久久久久久亚洲Av无码精品专口| 亚洲成av人片在线观看天堂无码 | 免费人成在线观看网站品爱网| 国产成人亚洲精品播放器下载 | 亚洲mv国产精品mv日本mv| 国产亚洲精品xxx| 日韩精品电影一区亚洲| 成人无遮挡裸免费视频在线观看| 国产线视频精品免费观看视频| 色五月五月丁香亚洲综合网| 亚洲另类古典武侠| 亚洲视频在线观看网站| 久久久久久a亚洲欧洲AV| 亚洲人成中文字幕在线观看| 亚洲国产精品日韩| 免费播放春色aⅴ视频| 日韩在线看片免费人成视频播放 |