定時任務Quartz簡單配置與cron表達式

          項目中需要一個定時任務 ,尋找到一種使用方式, 記錄下來;


          NO.1 配置spring

          ?1?<!--?要調用的工作類?-->
          ?2???<bean?id="alarmCheckQuartzJob"?class="com.cqta.oatianai.job.AlarmCheckQuartzJob"/>??
          ?3???<!--?定義調用對象和調用對象的方法?-->
          ?4???<bean?id="alarmLogInitQuartzJobTask"?class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">?
          ?5???????<!--?調用的類?-->
          ?6?????<property?name="targetObject">?
          ?7???????<ref?bean="alarmCheckQuartzJob"/>?
          ?8?????</property>??
          ?9?<!--?調用類中的方法?-->
          10?????<property?name="targetMethod">?
          11???????<value>work</value>?
          12?????</property>?
          13???</bean>??
          14???<!--?定義觸發時間?-->
          15???<bean?id="alarmLogInitQuartzJobTrigger"?class="org.springframework.scheduling.quartz.CronTriggerBean">?
          16?????<property?name="jobDetail">?
          17???????<ref?bean="alarmLogInitQuartzJobTask"/>?
          18?????</property>??
          19??????????<!--?cron表達式每秒鐘觸發一次該任務 -->
          20?????<property?name="cronExpression">?
          21???????<value>0/1?*?*?*?*??</value>
          22?????</property>?
          23???</bean>??
          24?????<!--?總管理類?如果將lazy-init='false'那么容器啟動就會執行調度程序??-->
          25???<bean?id="startQuertz"?lazy-init="false"?autowire="no"?class="org.springframework.scheduling.quartz.SchedulerFactoryBean">?
          26?????<property?name="triggers">?
          27???????<list>?
          28?????????<ref?bean="alarmLogInitQuartzJobTrigger"/>??
          29???????</list>?
          30?????</property>?
          31???</bean>?

          NO.2 編寫要調用的工作類

          package?com.cqta.oatianai.job;

          public?class?AlarmCheckQuartzJob?{
          ????
          public?void?work()?{
          ????????System.out.println("定時任務觸發測試");
          ????}
          }


          NO.3 cron表達式編寫
          上面配置文件中的表達式,表示每秒鐘觸發一次工作類的work方法(任務)

          1???????<!--?cron表達式?-->
          2?????<property?name="cronExpression">?
          3???????<value>0/1?*?*?*?*??</value>?
          4?????</property>

          其中 表達式0/1?*?*?*?*??用空格分為了6部分,各部分對應的時間單位定義如下
          秒 分 小時 日期 月份 星期 年

          字段

          允許值

          允許的特殊字符

          ??

          0-59

          , - * /

          0-59

          , - * /

          小時

          0-23

          , - * ? / L W C

          日期

          1-31

          , - * /

          月份

          1-12?或者 JAN-DEC

          , - * ? / L C #

          星期

          1-7?或者 SUN-SAT

          , - * /

          年(可選)

          留空, 1970-2099

          ??

          ? ?

          其中 "?"字符僅被用于天(日期)和天(星期)兩個子表達式,表示不指定值; 當2個子表達式其中之一被指定了值以后,為了避免沖突,需要將另一個子表達式的值設為
          目前個人理解:日期和星期 2部分是互斥的,不能同時定義到表達式中,即2者之一 必須用
          表達式共7個部分 ,最后部分年為可選。每個部分出現的數字和字符的組合,表達了該部分對應的時間單位的約束,不需要約束的部分就用*號代替即可。

          其中每個元素可以是一個值(如6),一個連續區間(9-12),一個間隔時間(8-18/4)(/表示每隔4小時),一個列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"這兩個元素互斥的,必須要對其中一個設置?.

          以下是一些cron表達式實例:

          0 0 10,14,16 * * ? 每天上午10點,下午2點,4點
          0 0/30 9-17 * * ??? 朝九晚五工作時間內每半小時
          0 0 12 ? * WED 表示每個星期三中午12點

          "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觸發?

          有些子表達式能包含一些范圍或列表

          例如:子表達式(天(星期))可以為 "MON-FRI","MON,WED,FRI","MON-WED,SAT"

          "*"字符代表所有可能的值

          因此,"*"在子表達式()里表示每個月的含義,"*"在子表達式(天(星期))表示星期的每一天

          ?"/"字符用來指定數值的增量

          例如:

          在子表達式(分鐘)里的"0/15"表示從第0分鐘開始,每15分鐘?

          在子表達式(分鐘)里的"3/20"表示從第3分鐘開始,每20分鐘(它和"3,23,43")的含義一樣

          "L" 字符僅被用于天(月)和天(星期)兩個子表達式,它是單詞"last"的縮寫

          但是它在兩個子表達式里的含義是不同的。

          在天(月)子表達式中,"L"表示一個月的最后一天

          在天(星期)自表達式中,"L"表示一個星期的最后一天,也就是SAT

          如果在"L"前有具體的內容,它就具有其他的含義了

          例如:"6L"表示這個月的倒數第6天,"FRIL"表示這個月的最一個星期五

          注意:在使用"L"參數時,不要指定列表或范圍,因為這會導致問題

          參考鏈接

          http://www.aygfsteel.com/allen-zhe/archive/2007/01/09/92668.html

          http://biaoming.javaeye.com/blog/39532

          ??



          追逐和夢想一樣的激情,暖暖的火焰點燃生命,度過暖暖的每一天...

          posted on 2010-10-12 14:49 無盡海 閱讀(1088) 評論(0)  編輯  收藏 所屬分類: Quartz


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


          網站導航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          好久沒來了...

          常用鏈接

          留言簿

          隨筆分類(3)

          隨筆檔案(5)

          友情鏈接

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 丹寨县| 天峨县| 永登县| 仙桃市| 如东县| 霍城县| 于都县| 海原县| 巴林左旗| 思南县| 阿克陶县| 徐闻县| 布拖县| 外汇| 榆社县| 新和县| 易门县| 色达县| 福海县| 剑河县| 庆阳市| 新和县| 会东县| 兖州市| 庆安县| 玛沁县| 宾阳县| 灵璧县| 若尔盖县| 阳西县| 桦甸市| 马公市| 杭州市| 道孚县| 南皮县| 鄢陵县| 富川| 黑河市| 南靖县| 南召县| 合作市|