java定時任務實現的幾種方式
在開發測試工具的應用後臺,經常聽到同事說要做個定時任務把做日誌處理,或者資料清理,包括做些複雜的業務計算邏輯,在選擇定時任務的時候,怎麼能夠快速實現,並且選擇一種更適合自己的方式呢? 我這裡把定時任務的實現收集整理了一些方法,希望可以幫到剛開始做定時任務的同學,寫得不對的地方請指正。
一 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掃描註解用的。
相關文章
- 幾種實現延時任務的方式(一)
- Python實現定時任務的多種方式Python
- Java實現定時任務的三種方法Java
- Spring Boot 實現定時任務的 4 種方式Spring Boot
- 玩轉SpringBoot:SpringBoot的幾種定時任務實現方式Spring Boot
- Spring Boot 中實現定時任務的兩種方式Spring Boot
- Java如何實現定時任務?Java
- 定時任務的實現
- 實戰Spring Boot 2.0系列(六) - 單機定時任務的幾種實現Spring Boot
- Java定時任務實現優惠碼Java
- 使用Java實現定時任務排程Java
- Spring Boot2 系列教程(十六)定時任務的兩種實現方式Spring Boot
- js實現0ms延時定時器的幾種方式JS定時器
- 幾種任務排程的 Java 實現方法與比較Java
- java springboot 實現定時器任務JavaSpring Boot定時器
- java幾種代理模式的實現方式Java模式
- 分散式事務的幾種實現方式分散式
- Java 定時任務Java
- 如何用 Java 實現 Web 應用中的定時任務?JavaWeb
- PHP定時執行任務的實現PHP
- [筆記]laravel定時任務的實現筆記Laravel
- springboot+quartz以持久化的方式實現定時任務Spring Bootquartz持久化
- java web定時任務JavaWeb
- Java & Go 定時任務JavaGo
- Go定時器的三種實現方式Go定時器
- quartz學習-quartz編碼方式實現定時任務簡例quartz
- 基於redis實現定時任務Redis
- Quartz實現動態定時任務quartz
- Java Web應用下實現定時任務的簡便方法JavaWeb
- Java 中的定時任務(一)Java
- Spring排程定時任務的方式Spring
- java定時器的幾種用法Java定時器
- Spring定時器的兩種實現方式Spring定時器
- Java編寫定時任務Java
- java定時任務巢狀Java巢狀
- Java建立多執行緒的幾種方式實現Java執行緒
- linux實現一個定時任務Linux
- Linux中如何實現定時任務Linux