spring定時任務排程quartz
阿新 • • 發佈:2018-11-18
1.maven依賴
<!-- 定時任務 --> <dependency> <groupId>quartz</groupId> <artifactId>quartz</artifactId> <version>1.5.2</version> </dependency>
2.寫一個需要排程任務的方法
@Component public class PostDataService { private final Logger logger= LoggerFactory.getLogger(getClass()); //@PostConstruct 如果開啟就是專案啟動後執行此方法 public void run() { try { logger.info("開始執行--------------"); //**查詢所有產品資料 和產品客戶關係資料 List<Products> products = getAll(Products.class); List<ClientProductView> clientProducts = getAll1(ClientProductView.class); start(products,clientProducts); } catch (Exception e) { //錯誤日誌記錄 logger.error("、執行----報錯----------\r\n" + e.getMessage()); e.printStackTrace(); }finally { logger.info("結束執行--------------"); //成功日誌記錄} }
3.配置檔案(能被spring掃描到)
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/beans/beans*.xml</param-value> </context-param>
配置檔案寫法beans-quartz-task.xml
(1).bean,表明哪個類
<bean id="postDataService" class="com.study.demo.service.quartz.PostDataService"> </bean>(2).要定時執行的方法
<!--要定時執行的方法--> <bean id="postDataInvoker" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <!--指定要定時執行的方法所在類,將定時任務定義成bean--> <ref bean="postDataService" /> </property> <property name="targetMethod"> <!--指定定時執行的方法--> <value>run</value> </property> <property name="concurrent"> <!--指定目標封裝為有狀態的任務,有狀態的任務不能併發執行,無狀態的任務可併發執行--> <value>true</value> </property> </bean>(3).定義觸發時間
<!-- 定義觸發時間 --> <bean id="postDataTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="postDataInvoker" /> </property> <property name="startDelay"> <value>60000</value> </property> <!-- cron表示式,此處是每天兩點執行 --> <property name="cronExpression"> <!--<value> 0 0/10 * * * ?</value>--><!-- 每隔10分鐘, --> <value> 0 0 2 * * ?</value><!-- 每天兩點執行, --> </property> </bean>(4).啟動工作
<!--啟動工作--> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="postDataTrigger" /> </list> </property> </bean>
以上就是任務定時排程
附帶
"0 0 * * * ? "每天整點觸發
"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觸發
備註:定時排程,當伺服器啟動後,定時排程開始倒計時,所以通過修改伺服器時間對此是沒有影響的