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

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

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

    框架-quartz

    一:quartz簡(jiǎn)介
           OpenSymphony 的Quartz提供了一個(gè)比較完美的任務(wù)調(diào)度解決方案。
           Quartz 是個(gè)開源的作業(yè)調(diào)度框架,定時(shí)調(diào)度器,為在 Java 應(yīng)用程序中進(jìn)行作業(yè)調(diào)度提供了簡(jiǎn)單卻強(qiáng)大的機(jī)制。
           Quartz中有兩個(gè)基本概念:作業(yè)和觸發(fā)器。作業(yè)是能夠調(diào)度的可執(zhí)行任務(wù),觸發(fā)器提供了對(duì)作業(yè)的調(diào)度

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

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


    •    詳解quartz在spring里面的配置
        在spring里主要分為兩種使用方式:第一種,也是目前使用最多的方式,spring提供的MethodInvokingJobDetailFactoryBean代理類,通過(guò)雷利類直接調(diào)用任務(wù)類的某個(gè)函數(shù);第二種,程序里實(shí)現(xiàn)quartz接口,quartz通過(guò)該接口進(jìn)行調(diào)度。

          主要講解通過(guò)spring提供的代理類MethodInvokingJobDetailFactoryBean

            1.業(yè)務(wù)邏輯類:業(yè)務(wù)邏輯是獨(dú)立的,本身就與quartz解耦的,并沒(méi)有深入進(jìn)去,這對(duì)業(yè)務(wù)來(lái)講是很好的一個(gè)方式。

                            public class  TestJobTask{
         

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

    }
           
        2.增加一個(gè)線程池
        <!-- 線程執(zhí)行器配置,用于任務(wù)注冊(cè) -->
    <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.定義業(yè)務(wù)邏輯類

        <!-- 業(yè)務(wù)對(duì)象 -->
    <bean id="testJobTask" class="com.mike.scheduling.TestJobTask" />


        4.增加quartz調(diào)用業(yè)務(wù)邏輯

        <!-- 調(diào)度業(yè)務(wù) -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
     <property name="targetObject" ref="testJobTask" />
     <property name="targetMethod" value="service" />
    </bean>

        5.增加調(diào)用的觸發(fā)器,觸發(fā)的時(shí)間,有兩種方式:

         第一種觸發(fā)時(shí)間,采用類似linux的cron,配置時(shí)間的表示發(fā)出豐富  
      <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
     <property name="jobDetail" ref="jobDetail" />
     <property name="cronExpression" value="10 0/1 * * * ?" />
    </bean>
      Cron表達(dá)式“10 */1 * * * ?”意為:從10秒開始,每1分鐘執(zhí)行一次 
      
        第二種,采用比較簡(jiǎn)話的方式,申明延遲時(shí)間和間隔時(shí)間
      <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秒啟動(dòng),然后每隔1分鐘執(zhí)行一次 

        6.開始調(diào)用

          <!-- 設(shè)置調(diào)度 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
     <property name="triggers">
      <list>
       <ref bean="cronTrigger" />
      </list>
     </property>
     <property name="taskExecutor" ref="executor" />
    </bean>

       7.結(jié)束:?jiǎn)?dòng)容器即可,已經(jīng)將spring和quartz結(jié)合完畢。

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

    三:quartz原理

        根據(jù)上面spring的配置,我們就比較清楚quartz的內(nèi)部情況,下面我們主要詳解配置涉及到的每個(gè)點(diǎn)
        1.我們先從最后一個(gè)步驟看起,SchedulerFactoryBean ,scheduler的工廠實(shí)現(xiàn),里面可以生產(chǎn)出對(duì)應(yīng)的多個(gè)jobDetail和trigger,每個(gè)jobDetail對(duì)應(yīng)trigger代表一個(gè)任務(wù)
             Quartz的SchedulerFactory是標(biāo)準(zhǔn)的工廠類,不太適合在Spring環(huán)境下使用。此外,為了保證Scheduler能夠感知 Spring容器的生命周期,完成自動(dòng)啟動(dòng)和關(guān)閉的操作,必須讓Scheduler和Spring容器的生命周期相關(guān)聯(lián)。以便在Spring容器啟動(dòng)后, Scheduler自動(dòng)開始工作,而在Spring容器關(guān)閉前,自動(dòng)關(guān)閉Scheduler。為此,Spring提供 SchedulerFactoryBean,這個(gè)FactoryBean大致?lián)碛幸韵碌墓δ埽?nbsp;
         1)以更具Bean風(fēng)格的方式為Scheduler提供配置信息; 
         2)讓Scheduler和Spring容器的生命周期建立關(guān)聯(lián),相生相息; 
         3)通過(guò)屬性配置部分或全部代替Quartz自身的配置文件。 
      2.jobDetail,表示一個(gè)可執(zhí)行的業(yè)務(wù)調(diào)用
      
      3.trigger:調(diào)度的時(shí)間計(jì)劃,什么時(shí)候,每隔多少時(shí)間可執(zhí)行等時(shí)間計(jì)劃

      4.ThreadPoolTaskExecutor,線程池,用來(lái)并行執(zhí)行每個(gè)對(duì)應(yīng)的job,提高效率,這也是上面提到不推薦使用jdk自身timer的一個(gè)很重要的原因

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

    評(píng)論

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

    飄過(guò),學(xué)習(xí)。。。。。嘻嘻  回復(fù)  更多評(píng)論   

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

    為啥我寫的定時(shí)任務(wù)在本地的window機(jī)上可以正常執(zhí)行,但是部署到服務(wù)器上就不執(zhí)行了,服務(wù)器是linux環(huán)境,這個(gè)跟操作系統(tǒng)有關(guān)系嗎?配置文件是這樣的:<bean id="ermsFilePushJob" class="net.soft.service.message.schedule.ErmsFilePushJob"/>

    <!-- 調(diào)度業(yè)務(wù) -->

    <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> -->
    <!-- 設(shè)置調(diào)度 -->

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
    <list>
    <ref local="cronTrigger" />
    </list>
    </property>
    </bean>  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    <2016年6月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲精品91在线| a一级毛片免费高清在线| 免费国产人做人视频在线观看| 一级做α爱过程免费视频| 久久av无码专区亚洲av桃花岛| 日本免费无遮挡吸乳视频电影| 中文精品人人永久免费| 久久久国产亚洲精品| 在线精品亚洲一区二区三区| 四虎永久在线精品免费观看视频| 黄页网址在线免费观看| 综合自拍亚洲综合图不卡区| 免费一级毛片女人图片| 亚洲精品免费在线视频| jizz免费在线观看| 久久亚洲精品国产亚洲老地址| 亚洲精品高清国产一线久久| 成人a视频片在线观看免费| 全免费a级毛片免费看| 国产成人亚洲精品电影| 亚洲精品福利网站| 亚洲中文字幕丝袜制服一区| 亚洲中文无码永久免费| 色www永久免费网站| 国产91成人精品亚洲精品| 亚洲精品中文字幕乱码影院| 国产AⅤ无码专区亚洲AV| 国产网站在线免费观看| 真人做人试看60分钟免费视频| 9i9精品国产免费久久| 羞羞视频免费网站入口| 国产精品亚洲精品| 亚洲国语精品自产拍在线观看| 中文字幕久久亚洲一区 | 日本一卡精品视频免费| 特a级免费高清黄色片| 亚洲youwu永久无码精品| 国产亚洲sss在线播放| 亚洲色欲或者高潮影院| 亚洲AV无码欧洲AV无码网站| 久久久久亚洲av毛片大|