1. 程式人生 > >spring定時器,定時器一次執行兩次的問題

spring定時器,定時器一次執行兩次的問題

今天在做一個專案的時候用到了Spring的定時計劃任務。這是Spring的特色功能,可以根據設定在特定的時間或間隔時間做特定的事。

下面給出一個例子:

  1. package net.csdn.blog.chaijunkukn;  
  2. import java.text.SimpleDateFormat;  
  3. import java.util.Calendar;  
  4. import java.util.Locale;  
  5. publicclass TimerTask {  
  6.     publicvoid printTimeStamp(){  
  7.         Calendar ca= Calendar.getInstance();  
  8.         ca.setTimeInMillis(System.currentTimeMillis());  
  9.         SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS ", Locale.CHINA);  
  10.         //顯示當前時間 精確到毫秒
  11.         System.out.print(sdf.format(ca.getTime()));       
  12.     }  
  13.     public TimerTask(){  
  14.         this.printTimeStamp();  
  15.         System.out.println("計劃任務被初始化了");  
  16.     }  
  17.     publicvoid doTask(){  
  18.         this.printTimeStamp();        
  19.         System.out.print("計劃任務被執行,執行緒id:");  
  20.         System.out.println(Thread.currentThread().getId());  
  21.     }  
  22. }  

根據Spring關於定時任務的規範,任務執行方法應為無引數無返回的方法,因此按照規範上面的例子中聲明瞭doTask方法。上面的例子很簡單,Spring作為IoC容器,構造TimerTask例項時會呼叫無參建構函式,此類會在例項化時在控制檯輸出當前時間和構造資訊。當定時任務被觸發時,也會在控制檯顯示當前時間和任務被執行的提示資訊。

下面是配置(需要宣告的是,本例項基於J2EE工程,使用了log4j,配置檔案只是工程中的一部分): 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
  6.     <!-- 註冊定時器 -->  
  7.     <bean id="timer"
  8.         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  9.         <property name="triggers">  
  10.             <list>  
  11.                 <ref bean="timerTaskTrigger" />  
  12.             </list>  
  13.         </property>  
  14.     </bean>  
  15.     <!-- 指定何時觸發定時任務 -->  
  16.     <bean id="timerTaskTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">  
  17.         <property name="jobDetail">  
  18.             <ref bean="timerTaskJobDetail" />  
  19.         </property>  
  20.         <property name="cronExpression">  
  21.             <!-- 每3秒鐘觸發一次 -->  
  22.             <value>0/3 * * * * ?</value>  
  23.         </property>  
  24.     </bean>  
  25.     <!-- 指定定時任務細節 呼叫哪個類 哪個方法 -->  
  26.     <bean id="timerTaskJobDetail"
  27.         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  28.         <property name="targetObject">  
  29.             <ref bean="timerTaskInstance" />  
  30.         </property>  
  31.         <property name="targetMethod">  
  32.             <value>doTask</value>  
  33.         </property>  
  34.         <property name="concurrent" value="false" />  
  35.     </bean>  
  36.     <!-- 例項化定時任務類 -->  
  37.     <bean id="timerTaskInstance"class="net.csdn.blog.chaijunkukn.TimerTask" />  
  38. </beans>  

web.xml的配置: 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app id="WebApp_ID" version="2.4"
  3.     xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  5.     <display-name>TaskTest</display-name>  
  6.     <servlet>  
  7.         <servlet-name>springapp</servlet-name>  
  8.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  9.         <init-param>  
  10.             <param-name>contextConfigLocation</param-name>  
  11.             <param-value>/WEB-INF/classes/applicationContext*.xml</param-value>  
  12.         </init-param>  
  13.         <load-on-startup>1</load-on-startup>  
  14.     </servlet>  
  15.     <servlet-mapping>  
  16.         <servlet-name>springapp</servlet-name>  
  17.         <url-pattern>*.htm</url-pattern>  
  18.     </servlet-mapping>  
  19.     <filter>  
  20.         <filter-name>EncodingFilter</filter-name>  
  21.         <filter-class>com.ku6.tech.wap.filter.EncodingFilter</filter-class>  
  22.         <init-param>  
  23.             <param-name>encoding</param-name>  
  24.             <param-value>utf-8</param-value>  
  25.         </init-param>  
  26.         <init-param>  
  27.             <param-name>forceEncoding</param-name>  
  28.             <param-value>true</param-value>  
  29.         </init-param>  
  30.     </filter>  
  31.     <filter-mapping>  
  32.         <filter-name>EncodingFilter</filter-name>  
  33.         <url-pattern>*.htm</url-pattern>  
  34.     </filter-mapping>  
  35.     <error-page>  
  36.         <error-code>404</error-code>  
  37.         <location>/error.jsp</location>  
  38.     </error-page>  
  39.     <welcome-file-list>  
  40.         <welcome-file>index.jsp</welcome-file>  
  41.     </welcome-file-list>  
  42.     <listener>  
  43.         <listener-

    相關推薦

    spring定時定時執行的問題

    今天在做一個專案的時候用到了Spring的定時計劃任務。這是Spring的特色功能,可以根據設定在特定的時間或間隔時間做特定的事。 下面給出一個例子: package net.csdn.blog.chaijunkukn;   import

    ####jquery click點選執行解決方法【遇到】【解決(先接觸繫結再繫結):$('#addImg').unbind('click').click(function () {})】

    ====專案例項: <%--$("body").on("click", "#toggle-button${activityDTO.id}", function (e) {--%> // 一次點選兩次觸發事件 <%--$("body").on("click", "#switc

    input內容改變後ie11中change事件執行的解決辦法

    頁面檔案上傳,程式碼如下: <form id="subId" action="doc/uploadTranslate"enctype="multipart/form-data"method="p

    Java Web開發中自定義過濾器被執行的原因分析及解決辦法

    本文出處:http://blog.csdn.net/chaijunkun/article/details/7646338,轉載請註明。由於本人不定期會整理相關博文,會對相應內容作出完善。因此強烈建議在原始出處檢視此文。 在Java Web開發過程中,我們可以使用過濾器和Sp

    spring定時task為什麼在伺服器上會執行2

    spring定時器task為什麼在伺服器上會執行2次 在本地idea執行專案時spring定時器只運行了一次,通過多次測試沒問題後我就把專案部署到伺服器上面,結果在伺服器上spring定時器竟然運行了2次,這我就想不明白了.我肯定程式碼和配置是沒有問題的,想了想難道是伺

    Spring定時在同一時間重複執行

    轉自: http://blog.sina.com.cn/s/blog_4c03369c0101tbtj.html 最近用Spring的quartz定時器的時候,發現到時間後,任務總是重複執行兩次,在tomcat或jboss下都如此。打印出他們的hashcode,發現是

    關於Spring中用quartz定時定時到達時同時執行的問題

    我在使用spring的quartz配置定時任務時,發現每次定時時間到達後,指定的定時方法同時執行兩次,而且此方法還是使用的synchronized關鍵字,每次定時一到,會發現此方法內的System.out輸出資訊輸出兩次,說明方法在這時執行了兩次,解決方法沒有找到更好的,不過

    spring 定時執行

    spring錯誤筆記 spring定時器執行兩次因為匯入了兩次 關於配置檔案如下 <bean id="timeTaskService" class="xx.xxx.xxx.xxx.service.impl.na.TimeTaskService"/><ta

    springboot項目啟動項目後啟動的定時定時執行任務

    @override code bapi calendar time() exist pri ram list() package com.wiscom.ism.webapi.ismController; import org.springframework.boot.A

    springboot專案啟動專案後啟動的定時定時執行任務

    package com.wiscom.ism.webapi.ismController; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; i

    java定時每天00:00執行任務

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Timer; import java.util.TimerTask; public class Time

    java springmvc 定時方法執行問題

    原因是在web.xml要例項化兩次分別是<servlet></servlet>和<context-param></context-param>裡,所以要將定時器對任務,單獨寫到一個xml檔案裡,配置如下 <context

    spring3.0基於註解的定時以及執行的解決辦法

    參考: 配置檔案: 1.首先要在application-context.xml裡面配置好namespace 和schema,如下: xmlns:task="http://www.springframework.org/schema/task" 2.在appli

    C51微控制器中斷暫存定時PWM原理配置及使用

    大家晚上好,我分享的內容大體是先介紹中斷,各暫存器使用(可能這裡有點囉嗦),然後就簡單寫一下定時器,然後PWM原理,以及它的配置和使用。大概今晚就這樣了,如果有什麼錯的,或有什麼疑問,請大家馬上提出來,一起進步。 中斷:當計算機執行正常程式時,系統中出現某些急需處理的異常

    spring定時任務執行的原因與解決方法

    ref net 任務 article 服務 每次 bsp tail 本地 spring定時任務,本地執行一次,放到服務器上後,每次執行時會執行兩次,原因及解決辦法。 http://blog.csdn.net/yaobengen/article/details/70312

    一個部署了tomcat服務的linux服務運行段時間後出現內存和空間不足的問題

    denied dev inux 使用情況 往裏面 a.out leo 輸出 byte —— 前段時間項目上的事比較忙,期間筆記都是臨時存在本地txt,這些天有點時間了,整理出來,以便日後查看; linux 查看內存使用情況:free -m 釋放緩

    10款流行的Markdown編輯總有款適合你

    摘要:作為一個開源人,如果你不會使用Markdown語法,那你就OUT了!Markdown 是 2004 年由 John Gruberis 設計和開發的純文字格式的語法,非常的簡單實用。 作為一個開源人,如果你不會使用Markdown語法,那你就OUT了!Markdown 是 2004 年由 John Gr

    VS程式設計WPF中後臺C#建立Telerik顏色選擇顏色拾取調色盤的種方法

    之前的文章說過如何通過XAML語言,前臺建立顏色拾取器, 這裡展示一種後臺程式碼建立顏色調色盤的方法。 1、前臺的XAML格式 <telerik:RadColorEditor Width="500"

    VS程式設計WPF中通過telerik控制元件建立顏色選擇顏色拾取調色盤的種方法

     這裡展示使用telerik控制元件時,呼叫顏色調色盤,顏色選擇器,顏色拾取器的一種方法 1、增加引用 2、前臺定義引用 xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"

    VS程式設計WPF中通過C# 建立顏色選擇顏色拾取調色盤的種方法

    有時為了美觀,需要動態、靈活的更改某一控制元件的顏色, 這時通過顏色選擇器進行取色是比較方便的一種方法。 參考:網址 顏色選擇器效果如下: 1、前臺定義一個控制元件並命名 2、前臺定義一個事件 3、增加兩個引用 4、增加