java定時任務的實現方式_java

來源:互聯網
上載者:User

在開發測試載入器的應用後台,經常聽到同事說要做個定時任務把做Tlog,或者資料清理,包括做些複雜的業務計算邏輯,在選擇定時任務的時候,怎麼能夠快速實現,並且選擇一種更適合自己的方式呢? 我這裡把定時任務的實現收集整理了一些方法,希望可以幫到剛開始做定時任務的同學,寫得不對的地方請指正。
一  Java 基本的定時任務,總結方法有三種:

1.1   建立一個thread,然後讓它在while迴圈裡一直運行著,通過sleep方法來達到定時任務的效果;

1.2   用Timer和TimerTask與第一種方法相比有如下好處:

  • 當啟動和去取消任務時可以控制
  • 第一次執行任務時可以指定你想要的delay時間

1.3   用ScheduledExecutorService是從的java.util.concurrent裡,做為並發工具類被引進的,這是最理想的定時任務實現方式,相比於上兩個方法,它有以下好處:

  • 相比於Timer的單線程,它是通過線程池的方式來執行任務的
  • 可以很靈活的去設定第一次執行任務delay時間
  • 提供了良好的約定,以便設定執行的時間間隔

 

二  Spring 定時任務,總結方式也有三種:

2.1    ScheduledTimerTask:  Spring的ScheduledTimerTask定義了一個定時器任務的運行周期,遺憾的是,你可以指定任務執行的頻度,但你無法精確指定它何時運行,這就需要用到第二種Quartz進行任務調度;

       建立一個業務任務,在Spring設定檔中聲明 ;
       在Spring 設定檔中,配置ScheduledTimerTask ,並且關聯上自訂的任務執行個體;
       啟動定時器,Spring的TimerFactoryBean負責啟動定時任務

 

 2.2    使用 Quartz:
 首先還是老樣子定義商務邏輯任務:

在Spring中聲明並且配置作業調度的觸發方式

這裡 Quartz的作業觸發器有兩種,分別是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean

 第一種SimpleTriggerBean,只支援按照一定頻度調用任務,如每隔一段時間運行一次。

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">   <property name="jobDetail" ref="myJob" />   <property name="startDelay" value="0" /><!-- 調度工廠執行個體化後,經過0秒開始執行調度 -->   <property name="repeatInterval" value="2000" /><!-- 每2秒調度一次 --> </bean> 

第二種CronTriggerBean,支援到指定時間運行一次,如每天12:00運行一次,如上配置;
配置調度工廠
org.springframework.scheduling.quartz.SchedulerFactoryBean,代碼如上;
啟動你的應用即可

 2.3   使用 Spring-Task
         Spring內建的定時任務工具,spring task,可以將它比作一個輕量級的Quartz,而且使用起來很簡單,除spring相關的包外不需要額外的包,而且支援註解和設定檔兩種:
         第一步:編寫任務類;TaskJob,method job1  --代碼省略
         第二步:在spring設定檔頭中添加命名空間及描述

<beans xmlns="http://www.springframework.org/schema/beans"   xmlns:task="http://www.springframework.org/schema/task"    xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> 

        第三步:spring設定檔中設定具體的任務

<task:scheduled-tasks>      <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>  </task:scheduled-tasks> <context:component-scan base-package="com.alibaba.mytask" /> 

說明:ref參數指定的即任務類,method指定的即需要啟動並執行方法,cron及cronExpression運算式,具體寫法這裡不介紹了,<context:component-scan base-package="com.alibaba.mytask" />spring掃描註解用的。

以上就是本文的全部內容,希望對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.