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

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

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

    框架-quartz

    一:quartz簡介
           OpenSymphony 的Quartz提供了一個比較完美的任務調度解決方案。
           Quartz 是個開源的作業調度框架,定時調度器,為在 Java 應用程序中進行作業調度提供了簡單卻強大的機制。
           Quartz中有兩個基本概念:作業和觸發器。作業是能夠調度的可執行任務,觸發器提供了對作業的調度

    二:quartz spring配置詳解
    •  為什么不適用java.util.Timer結合java.util.TimerTask 
            1.主要的原因,適用不方便,特別是制定具體的年月日時分的時間,而quartz使用類似linux上的cron配置,很方便的配置每隔時間執行觸發。

            2.其次性能的原因,使用jdk自帶的Timer不具備多線程,而quartz采用線程池,性能上比timer高出很多。


    •    詳解quartz在spring里面的配置
        在spring里主要分為兩種使用方式:第一種,也是目前使用最多的方式,spring提供的MethodInvokingJobDetailFactoryBean代理類,通過雷利類直接調用任務類的某個函數;第二種,程序里實現quartz接口,quartz通過該接口進行調度。

          主要講解通過spring提供的代理類MethodInvokingJobDetailFactoryBean

            1.業務邏輯類:業務邏輯是獨立的,本身就與quartz解耦的,并沒有深入進去,這對業務來講是很好的一個方式。

                            public class  TestJobTask{
         

          /**
           *業務邏輯處理
           
    */
            public void   service(){
                /**業務邏輯*/
                    ..
            }

    }
           
        2.增加一個線程池
        <!-- 線程執行器配置,用于任務注冊 -->
    <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
     <property name="corePoolSize" value="10" />
     <property name="maxPoolSize" value="100" />
     <property name="queueCapacity" value="500" />
    </bean>

      3.定義業務邏輯類

        <!-- 業務對象 -->
    <bean id="testJobTask" class="com.mike.scheduling.TestJobTask" />


        4.增加quartz調用業務邏輯

        <!-- 調度業務 -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
     <property name="targetObject" ref="testJobTask" />
     <property name="targetMethod" value="service" />
    </bean>

        5.增加調用的觸發器,觸發的時間,有兩種方式:

         第一種觸發時間,采用類似linux的cron,配置時間的表示發出豐富  
      <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
     <property name="jobDetail" ref="jobDetail" />
     <property name="cronExpression" value="10 0/1 * * * ?" />
    </bean>
      Cron表達式“10 */1 * * * ?”意為:從10秒開始,每1分鐘執行一次 
      
        第二種,采用比較簡話的方式,申明延遲時間和間隔時間
      <bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
     <property name="jobDetail" ref="jobDetail" />
     <property name="startDelay" value="10000" />
     <property name="repeatInterval" value="60000" />
    </bean>
      延遲10秒啟動,然后每隔1分鐘執行一次 

        6.開始調用

          <!-- 設置調度 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
     <property name="triggers">
      <list>
       <ref bean="cronTrigger" />
      </list>
     </property>
     <property name="taskExecutor" ref="executor" />
    </bean>

       7.結束:啟動容器即可,已經將spring和quartz結合完畢。

        Cron常用的表達式
        "0 0 12 * * ?" 每天中午12點觸發
    "0 15 10 ? * *" 每天上午10:15觸發
    "0 15 10 * * ?" 每天上午10:15觸發
    "0 15 10 * * ? *" 每天上午10:15觸發
    "0 15 10 * * ? 2005" 2005年的每天上午10:15觸發
    "0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鐘觸發
    "0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發
    "0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
    "0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發
    "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發
    "0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發
    "0 15 10 15 * ?" 每月15日上午10:15觸發
    "0 15 10 L * ?" 每月最后一日的上午10:15觸發
    "0 15 10 ? * 6L" 每月的最后一個星期五上午10:15觸發 
    "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個星期五上午10:15觸發
    "0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發

    三:quartz原理

        根據上面spring的配置,我們就比較清楚quartz的內部情況,下面我們主要詳解配置涉及到的每個點
        1.我們先從最后一個步驟看起,SchedulerFactoryBean ,scheduler的工廠實現,里面可以生產出對應的多個jobDetail和trigger,每個jobDetail對應trigger代表一個任務
             Quartz的SchedulerFactory是標準的工廠類,不太適合在Spring環境下使用。此外,為了保證Scheduler能夠感知 Spring容器的生命周期,完成自動啟動和關閉的操作,必須讓Scheduler和Spring容器的生命周期相關聯。以便在Spring容器啟動后, Scheduler自動開始工作,而在Spring容器關閉前,自動關閉Scheduler。為此,Spring提供 SchedulerFactoryBean,這個FactoryBean大致擁有以下的功能: 
         1)以更具Bean風格的方式為Scheduler提供配置信息; 
         2)讓Scheduler和Spring容器的生命周期建立關聯,相生相息; 
         3)通過屬性配置部分或全部代替Quartz自身的配置文件。 
      2.jobDetail,表示一個可執行的業務調用
      
      3.trigger:調度的時間計劃,什么時候,每隔多少時間可執行等時間計劃

      4.ThreadPoolTaskExecutor,線程池,用來并行執行每個對應的job,提高效率,這也是上面提到不推薦使用jdk自身timer的一個很重要的原因

    posted on 2012-07-03 14:42 陳睿 閱讀(3087) 評論(2)  編輯  收藏 所屬分類: 框架

    評論

    # re: 框架-quartz 2012-08-09 12:42 caiwei

    飄過,學習。。。。。嘻嘻  回復  更多評論   

    # re: 框架-quartz 2016-06-02 21:14 csj

    為啥我寫的定時任務在本地的window機上可以正常執行,但是部署到服務器上就不執行了,服務器是linux環境,這個跟操作系統有關系嗎?配置文件是這樣的:<bean id="ermsFilePushJob" class="net.soft.service.message.schedule.ErmsFilePushJob"/>

    <!-- 調度業務 -->

    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject">
    <ref bean="ermsFilePushJob" />
    </property>
    <property name="targetMethod">
    <value>executePush</value>
    </property>
    </bean>
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="jobDetail" />
    <property name="cronExpression" value="0 0 0 * * ?" />
    </bean> -->
    <!-- 設置調度 -->

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
    <list>
    <ref local="cronTrigger" />
    </list>
    </property>
    </bean>  回復  更多評論   


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


    網站導航:
     

    導航

    <2012年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久精品成人免费看| 91嫩草免费国产永久入口| 131美女爱做免费毛片| 最近免费中文字幕高清大全| 亚洲国产精品成人精品无码区 | 免费在线黄色电影| 亚洲综合精品网站| 中文字幕免费观看视频| 亚洲欧洲无码AV电影在线观看| 久久久久久久久久久免费精品| 国产aⅴ无码专区亚洲av| 99re热精品视频国产免费| 亚洲综合一区二区精品导航| 亚洲一级免费毛片| 亚洲国产夜色在线观看| 一个人看www在线高清免费看| 亚洲中文字幕一区精品自拍| 日韩午夜免费视频| 久草免费福利在线| 亚洲AV区无码字幕中文色| 青草草色A免费观看在线| 亚洲AV永久无码天堂影院| 亚洲国产香蕉人人爽成AV片久久 | a级毛片在线视频免费观看| 亚洲AV无码乱码国产麻豆穿越 | 亚洲一区无码中文字幕| 未满十八18禁止免费无码网站 | 色久悠悠婷婷综合在线亚洲| 久久永久免费人妻精品| 久久亚洲最大成人网4438| 免费在线一级毛片| 99久热只有精品视频免费观看17| 亚洲真人无码永久在线观看| 亚洲中文字幕伊人久久无码| 国产91免费视频| 猫咪免费人成在线网站| 久久亚洲日韩精品一区二区三区| 最新中文字幕电影免费观看| 一级毛片免费观看不收费| 亚洲精品亚洲人成在线麻豆| 四虎AV永久在线精品免费观看|