spring定时器总结
public?class?Busine***eport?{???
public?void?perform(){?//執行報表統計入口函數????
//業務邏輯????
}???
}???
-???
第一步,在Spring配置文件中增加本業務類???
-???
<bean?id="?busine***eport?"?class="?Busine***eport?"/>???
-???
第二步,定義任務。在Spring配置文件中配置代理類MethodInvokingJobDetailFactoryBean,定義任務的詳細信息。???
-???
<bean?id="?reportTask?"?class=?"org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">???
<property?name="?targetObject?"?ref="?busine***eport?"?/>???
<property?name="?targetMethod?"?value="?perform?"?/>???
<property?name="?concurrent?"?value="?false?"?/>???
</bean>???
-???
這個配置告訴Spring,我們的任務是執行id為busine***eport的bean中的perform函數。其中參數concurrent告訴Spring,不要并發運行這個任務。???
-???
第三步,配置一個觸發器。在Spring配置文件中配置觸發器類CronTriggerBean?。???
-???
<bean?id="cronTrigger"?class="org.springframework.scheduling.quartz.CronTriggerBean">???
<property?name="jobDetail"?ref="?reportTask?"?/>???
<property?name="cronExpression"?value="0?0?1?1?*??"?/>???
</bean>???
-???
觸發器將告訴Quartz兩件事:在何時觸發任務、觸發哪個任務。其中屬性參數cronExpression為調度時間,格式和unix上的?crontab類似,具體見下表1。“0?0?1?1?*??”表示每月1日凌晨1點運行。其中問號表示忽略該位置(星期)上的值。屬性參數jobDetail指向具體的任務bean:reportTask?。如果你有多個任務,每個任務的觸發時間都不一樣,則你可以在此配置多個不同的觸發器。 ??
時間大小由小到大排列,從秒開始,順序為 秒,分,時,天,月,年??? *為任意 ?為無限制。由此上面所配置的內容就是,在每天的16點26分啟動znrwdb方法?
具體時間設定可參考?
"0/10 * * * * ?" 每10秒觸發?
"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觸發?
每隔5秒執行一次:*/5 * * * * ??
每隔1分鐘執行一次:0 */1 * * * ??
每天23點執行一次:0 0 23 * * ??
每天凌晨1點執行一次:0 0 1 * * ??
每月1號凌晨1點執行一次:0 0 1 1 * ??
每月最后一天23點執行一次:0 0 23 L * ??
每周星期天凌晨1點實行一次:0 0 1 ? * L?
在26分、29分、33分執行一次:0 26,29,33 * * * ??
每天的0點、13點、18點、21點都執行一次:0 0 0,13,18,21 * * ??
通配符說明:
*?表示所有值. 例如:在分的字段上設置 "*",表示每一分鐘都會觸發。
??表示不指定值。使用的場景為不需要關心當前設置這個字段的值。例如:要在每月的10號觸發一個操作,但不關心是周幾,所以需要周位置的那個字段設置為"?" 具體設置為 0 0 0 10?*??
-?表示區間。例如 在小時上設置 "10-12",表示 10,11,12點都會觸發。
,?表示指定多個值,例如在周字段上設置 "MON,WED,FRI" 表示周一,周三和周五觸發
/?用于遞增觸發。如在秒上面設置"5/15" 表示從5秒開始,每增15秒觸發(5,20,35,50)。 在月字段上設置'1/3'所示每月1號開始,每隔三天觸發一次。
L?表示最后的意思。在日字段設置上,表示當月的最后一天(依據當前月份,如果是二月還會依據是否是潤年[leap]), 在周字段上表示星期六,相當于"7"或"SAT"。如果在"L"前加上數字,則表示該數據的最后一個。例如在周字段上設置"6L"這樣的格式,則表示“本月最后一個星期五"?
W?表示離指定日期的最近那個工作日(周一至周五). 例如在日字段上設置"15W",表示離每月15號最近的那個工作日觸發。如果15號正好是周六,則找最近的周五(14號)觸發, 如果15號是周未,則找最近的下周一(16號)觸發.如果15號正好在工作日(周一至周五),則就在該天觸發。如果指定格式為 "1W",它則表示每月1號往后最近的工作日觸發。如果1號正是周六,則將在3號下周一觸發。(注,"W"前只能設置具體的數字,不允許區間"-").
| 小提示 | 'L'和 'W'可以一組合使用。如果在日字段上設置"LW",則表示在本月的最后一個工作日觸發(一般指發工資?)? |
#?序號(表示每月的第幾個周幾),例如在周字段上設置"6#3"表示在每月的第三個周六.注意如果指定"#5",正好第五周沒有周六,則不會觸發該配置(用在母親節和父親節再合適不過了)
| 小提示 |
第四步,配置一個調度器。在Spring配置文件中配置調度器類SchedulerFactoryBean。???
-???
<bean?class=?"org.springframework.scheduling.quartz.SchedulerFactoryBean">???
<property?name="triggers">???
<list>???
<ref?bean="cronTrigger"?/>???
</list>???
</property>???
</bean> ??
轉載于:https://blog.51cto.com/breezewindlw/1627566
總結
以上是生活随笔為你收集整理的spring定时器总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【搭建web服务器】以及web的所有配置
- 下一篇: [GDAL]写入shp