1. 程式人生 > >spring定時任務排程quartz

spring定時任務排程quartz

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

備註:定時排程,當伺服器啟動後,定時排程開始倒計時,所以通過修改伺服器時間對此是沒有影響的