spring定時器入門例子

在很多的大型項目中都會用到定時器,這裏介紹一下spring定時器的應用

首先是必要jar的導入:如果懶得篩選那就把平時打spring框架的jar包直接全部放進去就行了,這裏就不羅列了

然後就是配置文件,配置文件是比較重要的:

 1、   web.xml 配置:      

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>Archetype Created Web Application</display-name>
 
  <!-- 1.spring框架 -->
  <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:TimerConfig.xml</param-value>
  </context-param>
  <listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
 
 
 <!-- 3.編碼過濾器,解決中文亂碼 -->
 <filter>
  <filter-name>SpringEncoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>utf-8</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>SpringEncoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

</web-app>

  2、然後寫測試類:          使用spring定時器的時候需要繼承TimerTask 重寫run方法,run方法裏面在去寫需要實現任務的邏輯

      package com.gome.timer.test;

       import java.util.TimerTask;

     public class MyTimerTask extends TimerTask{
              int i = 0;
           @Override
            public void run() {
               System.err.println("my timerTask "+i);
          }

   }

 

3、最後就是定時時間的配置了 目標任務方法的配置了 配置裏面註釋寫的很詳細

           <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <!--註冊定時執行任務實體-->
 <bean id="businessTestTime" class="com.gome.timer.test.MyTimerTask"/>
 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
   <property name="triggers">
     <list>
       <ref bean="businessTestTrigger"/>  
     </list>
   </property>
  </bean>
 
  <!-- 引用、配置要運行的方法 -->
 <bean id="businessTestDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
   <!-- 目標對象 -->
    <property name="targetObject">
      <ref bean="businessTestTime"/>
    </property>
   <!-- 是否同時發生 -->
    <property name="concurrent" value="false"></property>
    <!-- 目標方法 -->
    <property name="targetMethod" value="run"></property>
  </bean>
 
  <!-- 引用、定製時間間隔 -->
    <bean id="businessTestTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
   <property name="jobDetail">
     <ref bean="businessTestDetail"/>
   </property>
   <property name="cronExpression">
     <value>0/5 * * * * ?</value> <!-- 這裏的間隔時間的配置,如果不會配置,可以參考時間配置虧則 -->
   </property>
  </bean>
</beans>

     以上代碼直接拷貝進項目相應的文件即可運行

 

間隔時間配置規則:

     

1.秒(0–59)
2.分鐘(0–59)
3.小時(0–23)
4.月份中的日期(1–31)
5.月份(1–12或JAN–DEC)
6.星期中的日期(1–7或SUN–SAT)
7.年份(1970–2099)
0 0 10,14,16 * * ?
每天上午10點,下午2點和下午4點
0 0,15,30,45 * 1-10 * ?
每月前10天每隔15分鐘
30 0 0 1 1 ? 2012
在2012年1月1日午夜過30秒時
0 0 8-5 ? * MON-FRI
每個工作日的工作時間
各個時間可用值如下:

秒0-59 , - * /
分0-59 , - * /
小時0-23 , - * /
日1-31 , - * ? / L W C
月1-12 or JAN-DEC , - * /
周幾1-7 or SUN-SAT , - * ? / L C #
年(可選字段) empty, 1970-2099 , - * /
可用值詳細分析如下:

“*”——字符可以用於所有字段,在“分”字段中設爲"*"表示"每一分鐘"的含義。
“?”——字符可以用在“日”和“周幾”字段.它用來指定'不明確的值'.這在你需要指定這兩個字段中的某一個值而不是另外一個的時候會被用到。在後面的例子中可以看到其含義。
“-”——字符被用來指定一個值的範圍,比如在“小時”字段中設爲"10-12"表示"10點到12點"。
“,”——字符指定數個值。比如在“周幾”字段中設爲"MON,WED,FRI"表示"the days Monday, Wednesday, and Friday"。
“/”——字符用來指定一個值的的增加幅度.比如在“秒”字段中設置爲"0/15"表示"第0, 15, 30,和45秒"。而"5/15"則表示"第5, 20, 35,和50".在'/'前加"*"字符相當於指定從0秒開始.每個字段都有一系列可以開始或結束的數值。對於“秒”和“分”字段來說,其數值範圍爲0到59,對於“小時”字段來說其爲0到23,對於“日”字段來說爲0到31,而對於“月”字段來說爲1到12。"/"字段僅僅只是幫助你在允許的數值範圍內從開始"第n"的值。
“L”——字符可用在“日”和“周幾”這兩個字段。它是"last"的縮寫,但是在這兩個字段中有不同的含義。例如,“日”字段中的"L"表示"一個月中的最後一天" ——對於一月就是31號對於二月來說就是28號(非閏年)。而在“周幾”字段中,它簡單的表示"7" or "SAT",但是如果在“周幾”字段中使用時跟在某個數字之後,它表示"該月最後一個星期×" ——比如"6L"表示"該月最後一個週五"。當使用'L'選項時,指定確定的列表或者範圍非常重要,否則你會被結果搞糊塗的。
“W”——可用於“日”字段。用來指定歷給定日期最近的工作日(週一到週五)。比如你將“日”字段設爲"15W",意爲: "離該月15號最近的工作日"。因此如果15號爲週六,觸發器會在14號即週五調用。如果15號爲週日,觸發器會在16號也就是週一觸發。如果15號爲週二,那麼當天就會觸發。然而如果你將“日”字段設爲"1W",而一號又是週六,觸發器會於下週一也就是當月的3號觸發,因爲它不會越過當月的值的範圍邊界。'W'字符只能用於“日”字段的值爲單獨的一天而不是一系列值的時候。
“L”和“W”可以組合用於“日”字段表示爲'LW',意爲"該月最後一個工作日"。
“#”——字符可用於“周幾”字段。該字符表示“該月第幾個周×”,比如"6#3"表示該月第三個週五( 6表示週五而"#3"該月第三個)。再比如: "2#1" =表示該月第一個週一而"4#5" =該月第五個週三。注意如果你指定"#5"該月沒有第五個“周×”,該月是不會觸發的。
“C”——字符可用於“日”和“周幾”字段,它是"calendar"的縮寫。它表示爲基於相關的日曆所計算出的值(如果有的話)。如果沒有關聯的日曆,那它等同於包含全部日曆。“日”字段值爲"5C"表示"日曆中的第一天或者5號以後",“周幾”字段值爲"1C"則表示"日曆中的第一天或者週日以後"。
對於“月份”字段和“周幾”字段來說合法的字符都不是大小寫敏感的。
一些例子:

"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觸發
"0 15 10 15 * ?"每月15號的10:15觸發
"0 15 10 L * ?"每月的最後一天的10:15觸發
"0 15 10 ? * 6L"每月最後一個週五的10:15

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章