首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Spring 實現定時任務調度:TimerTask 配置全攻略

     編輯:J2EE

痛點:Web 容器熱加載導致 Timer 洩漏

傳統 ServletContextListener 啟動 Timer,類別熱更新後舊 Timer 線程殘留,導致重複執行、資源洩漏。Spring 內建調度支援完美解決此問題。

三步完成配置

1. web.xml 宣告 Spring 容器啟動

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/schedulingContext-timer.xml</param-value>
</context-param>
<servlet>
  <servlet-name>context</servlet-name>
  <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
  <load-on-startup>3</load-on-startup>
</servlet>

2. schedulingContext-timer.xml 定義任務鏈

<bean id="timer" class="org.springframework.scheduling.timer.TimerFactoryBean">
  <property name="scheduledTimerTasks">
    <list>
      <ref local="myScheduledTask"/>
    </list>
  </property>
</bean>

<bean id="myTask" class="com.example.MyTimerTask"/>

<bean id="myScheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
  <property name="timerTask"><ref bean="myTask"/></property>
  <property name="delay"><value>10000</value></property>   <!-- 首次延遲 10s -->
  <property name="period"><value>86400000</value></property> <!-- 間隔 24h -->
</bean>

3. 編寫業務任務類

package com.example;
public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        // 這裡放入定時執行的業務邏輯
        System.out.println("定時任務執行:" + new Date());
    }
}

優勢總結

  • 容器管理 Timer 生命週期,熱部署自動銷毀舊實例,零洩漏。
  • 增減任務只需調整 XML,無需動 Java 代碼,支援多任務併發。
  • 延遲/周期靈活配置,支援毫秒級精度。
  • Spring 2.0+ 建議改用 @Scheduled 註解或 TaskScheduler,API 更現代化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved