第一步:編寫任務類
/** * 定時任務 * @Auther: JacobYang * @Date: 2018/5/22 16:04 * @Description: */ public class TimerManager { public void doJob() {
System.out.println("-調度任務進行中..."); } }
第二步:配置XML
<!--定時任務--> <bean id="jobx" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class="com.djfy.intercept.TimerManager" /> </property><!--類名--> <property name="targetMethod" value="doJob" /><!--方法名--> <property name="concurrent" value="false" /><!-- 作業不併發調度 --> </bean>
<!--這是第三步的觸發器配置-->
<bean id="
cronTrigger
" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <property name="jobDetail" ref="jobx" /> <property name="startDelay" value="1000" /><!-- 調度工廠實例化後,經過1秒開始執行調度 --> <property name="repeatInterval" value="3000" /><!-- 每3秒調度一次 --></bean><!--第四步:配置調度工廠--> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> </bean>(注:同顏色字體,倆名稱必須一樣 我的任務是每天定時(23.59)執行,到這裏你的定時任務已經完成,可以不看下面)
第三步:配置觸發方式(觸發器)
Quartz的作業觸發器有兩種,分別是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
第一種SimpleTriggerBean,只支持按照一定頻度調用任務,如每隔30分鐘運行一次。
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <property name="jobDetail" ref="jobx" /> <property name="startDelay" value="1000" /><!-- 調度工廠實例化後,經過1秒開始執行調度 --> <property name="repeatInterval" value="30000" /><!-- 每30秒調度一次 --> </bean>
第二種CronTriggerBean,支持到指定時間運行一次,如每天23.59運行一次等。
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="jobx" /> <!--每天23:59運行一次 --> <property name="cronExpression" value="0 59 23 * * ?" /> </bean>
第四步:配置調度工廠
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> </bean>
(可查看問w3cschool)
附錄:
cronExpression的配置說明
字段 | 允許值 | 允許的特殊字符 |
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
小時 | 0-23 | , - * / |
日期 | 1-31 | , - * ? / L W C |
月份 | 1-12 或者 JAN-DEC | , - * / |
星期 | 1-7 或者 SUN-SAT | , - * ? / L C # |
年(可選) | 留空, 1970-2099 | , - * / |
- | 區間 |
* | 通配符 |
? | 你不想設置那個字段 |
CRON表達式 | 含義 |
"0 0 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分每分鐘一次觸發 |
"0 0/5 14 * * ?" | 每天從下午2點開始到2:55分結束每5分鐘一次觸發 |
"0 0/5 14,18 * * ?" | 每天的下午2點至2:55和6點至6點55分兩個時間段內每5分鐘一次觸發 |
"0 0-5 14 * * ?" | 每天14:00至14:05每分鐘一次觸發 |
"0 10,44 14 ? 3 WED" | 三月的每週三的14:10和14:44觸發 |
"0 15 10 ? * MON-FRI" | 每個週一、週二、週三、週四、週五的10:15觸發 |