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

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

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

    posts - 23, comments - 0, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    spring 任務調度總結

    Posted on 2008-08-18 17:04 beauty9235 閱讀(4229) 評論(0)  編輯  收藏

    作者: beauty9235  鏈接:http://beauty9235.javaeye.com/blog/229617  發表時間: 2008年08月08日

    聲明:本文系JavaEye網站發布的原創博客文章,未經作者書面許可,嚴禁任何網站轉載本文,否則必將追究法律責任!

    spring 任務調度總結
    參考資料
    http://www.ibm.com/developerworks/cn/java/j-quartz/
    http://www.opensymphony.com/quartz/download.action

    Java的Timer類和OpenSymphony的Quartz調度器是兩個流行的調度API。Spring為這兩個調度器提供了一個抽象層,可以更容易的使用他們


    spring+timer

    1 .使用java Timer調度任務
    第一步 web.xml
     <!--*********************** spring setting ***********************-->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/classes/applicationContextTimeTask.xml
            </param-value>
        </context-param>
    第二步  配置applicationContextTimeTask.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<beans>
         <!--
         ****************使用java Timer調度任務*********************
         使用java Timer調度第一步是從java.util.TimerTask派生一個任務
         聲明本身只是將EmailReportTask放到應用上下文,
        并在testBean屬性裝配TestBean
        在調度之前不會做任何事。
        -->
        <bean id="testBean" class="com.photo.test.TestBean"/>
        <bean id="reportTimerTask" class="com.photo.task.EmailReportTask">
            <property name="testBean">
                <ref bean="testBean"/>
            </property>
        </bean>
        <!--
        Spring的ScheduledTimerTimerTask定義了一個定時器任務的運行周期。應該如下裝配一個ScheduledTimerTask
        timerTask告訴ScheduledTimerTask運行哪個TimerTask,
        這里該裝配屬性指向reportTimerTask的一個引用。
        屬性period告訴ScheduledTimerTask以怎樣的頻率調用TimerTask的run()方法。
        這個屬性以毫秒作為單位,
        86400000指定該任務每24小時運行一次
        10X1000
         屬性scheduledTimerTasks  要求一個需要啟動的定時器任務列表。
         ScheduledTimerTask有一個delay屬性, 允許你指定當任務第一次運行之前應該等多久。
         如,EmailReportTask的第一次運行延遲5毫秒
        -->


        <bean id="scheduledReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
            <property name="timerTask">
                <ref bean="reportTimerTask"/>
            </property>
            <property name="period">
                <value>10000</value>
            </property>
            <property name="delay">
                <value>5000</value>
            </property>
        </bean>
        <!--Spring 的TimerFactoryBean負責啟動定時任務。按以下方式在Spring配置文件里聲明它-->
        <bean class="org.springframework.scheduling.timer.TimerFactoryBean">
            <property name="scheduledTimerTasks">
                <list>
                    <ref bean="scheduledReportTask"/>
                </list>
            </property>
        </bean>
    </beans>  
    第三步 相關類的編寫
     EmailReportTask.java
     public class EmailReportTask extends TimerTask {//必需繼承TimerTask
         Log log= LogFactory.getLog(EmailReportTask.class);
         public EmailReportTask() {
         }

         public void run() {//這個函數是調度任務執行的入口
            log.debug("task begin :"+testBean.greeting);
         }

         private TestBean testBean;//這里實現spring的依賴注入

         public void setTestBean(TestBean testBean) {
             this.testBean = testBean;
         }
     }
     testBean.java
     public class TestBean {
         public String greeting="hello,world";
     }
     
     
    spring+Quartz
    Quartz 作業調度框架所提供的 API 在兩方面都表現極佳:既全面強大,又易于使用。Quartz 可以用于簡單的作業觸發,也可以用于復雜的 JDBC 持久的作業存儲和執行。
    第一步  同上
    第二步  配置applicationContextTimeTask.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
    <beans>
    <bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean">
      <property name="jobClass">
       <value>com.photo.task.EmailReportTask2</value>
      </property>
      <property name="jobDataAsMap">
       <map>
        <entry key="testBean">
         <ref bean="testBean"/>
        </entry>
       </map>
      </property>
     </bean>
     <!--用它來指定一個工作應以怎樣的頻率運行,及第一次運行工作前應等多久-->
     <bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
      <property name="jobDetail">
       <ref bean="reportJob"/>
      </property>
      <property name="startDelay">
       <value>3600000</value>
      </property>
      <property name="repeatInterval">
       <value>86400000</value>
      </property>
     </bean>
    <!--
    CronTriggerBean允許更精確的控制任務的運行時間。如果要在每天的6:00運行任務可以按照以下方式聲明一個CronTriggerBean
    0 0 6 * * ?
    jobDetail屬性告訴觸發器調度哪一個工作,屬性cronExpression告訴觸發器何時觸發。一個cron表達式至少有6個由空格分隔的時間元素(最多7個)從左到右元素定義如下
       1。秒(0-59)
       2。分(0-59)
       3。小時(0-23)
       4。月份中的日期(1-31)
       5。月份(1-12 或 JAN-DEC)
       6。星期(1-7 或 SUN-SAT)
       7。年份(1970-2099)
      每一個元素都可以顯示規定的一個值,一個區間(9-14),一個列表(9,12,14)或一個通配符(*)月份中的日期和星期中的日期這兩個元素時互斥的一起應該通過設置一個問號(?)來表明不想設置那個字段
    對于cronReportTrigger我們設置的cronExpression為 0 0 6 * * ?可以讀作任意月份任何日期的6時0分0秒執行觸發器
    -->
     <bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
      <property name="jobDetail">
       <ref bean="reportJob"/>
      </property>
      <property name="cronExpression">
       <value>0/5 * * * * ?</value>
      </property>
     </bean>
     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
       <list>
        <ref bean="cronReportTrigger"/>
       </list>
      </property>
     </bean>
    </beans>  
    第三步 相關類的編寫  
     EmailReportTask2.java
     public class EmailReportTask2 extends QuartzJobBean {
         Log log = LogFactory.getLog(EmailReportTask.class);

         public EmailReportTask2() {
         }
     //這個函數是調度任務執行的入口
         protected void executeInternal(JobExecutionContext jobExecutionContext) throws org.quartz.JobExecutionException {

             log.debug("task 2 begin :" + testBean.greeting);
         }


         private TestBean testBean;//這里實現spring的依賴注入

         public void setTestBean(TestBean testBean) {
             this.testBean = testBean;
         }
     }
     TestBean.java 同上


    本文的討論也很精彩,瀏覽討論>>


    JavaEye推薦




    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲最大免费视频网| 日韩免费高清播放器| 最近最好的中文字幕2019免费| 日韩欧美亚洲国产精品字幕久久久| 国产成人yy免费视频| 亚洲天堂一区在线| 一个人免费高清在线观看| 最新亚洲卡一卡二卡三新区| 女人18毛片特级一级免费视频| 国产亚洲AV夜间福利香蕉149| 看全免费的一级毛片| 亚洲国产成人精品无码久久久久久综合 | 亚洲一本到无码av中文字幕| 69堂人成无码免费视频果冻传媒| 亚洲国产av美女网站| 成人免费看片又大又黄| 国产亚洲精品精品精品| 中文字幕亚洲日韩无线码| 在线看片免费人成视频播| 亚洲视频在线观看网址| 免费看黄视频网站| 黄色三级三级三级免费看| 亚洲人成网站在线播放vr| 久久久久久久99精品免费观看| 久久精品国产精品亚洲艾| 一级一黄在线观看视频免费| 成人爱做日本视频免费| 亚洲人成网国产最新在线| 四虎永久在线精品免费观看地址 | 免费无码又爽又刺激高潮软件| 亚洲av日韩av不卡在线观看| 国产精品视频全国免费观看| 日韩精品亚洲专区在线观看| 丝袜足液精子免费视频| 亚洲第一页在线播放| 亚洲黄色免费观看| 亚洲AV成人一区二区三区观看| 伊人久久大香线蕉亚洲五月天| 69视频在线是免费观看| 老牛精品亚洲成av人片| 久久久久久亚洲精品|