Spring整合TimerTask實現(xiàn)定時任務(wù)調(diào)度
一. 前言
最近在公司的項目中用到了定時任務(wù), 本篇博文將會對TimerTask定時任務(wù)進行總結(jié), 其實TimerTask在實際項目中用的不多,
因為它不能在指定時間運行, 只能讓程序按照某一個頻度運行.
二. TimerTask
JDK中Timer是一個定時器類, 它可以為指定的定時任務(wù)進行配置.
JDK中TimerTask是一個定時任務(wù)類, 該類實現(xiàn)了Runnable接口, 是一個抽象類, 我們可以繼承這個類, 實現(xiàn)定時任務(wù).
/**
* 繼承TimerTask實現(xiàn)定時任務(wù)
*/
public class MyTask extends TimerTask {
@Override
public void run() {
String currentTime = new SimpleDateFormat("yyy-MM-dd hh:mm:ss").format(new Date());
System.out.println(currentTime + " 定時任務(wù)正在執(zhí)行...");
}
public static void main(String[] args) {
Timer timer = new Timer();
// 1秒鐘執(zhí)行一次的任務(wù), 參數(shù)為: task, delay, peroid
timer.schedule(new MyTask(), 2000, 1000);
}
}
三. 整合Spring
兩個核心類: ScheduledTimerTask, TimerFactoryBean
ScheduledTimerTask類是對TimerTask的包裝器實現(xiàn), 通過該類可以為這個任務(wù)定義觸發(fā)器信息.
TimerFactoryBean類可以讓Spring使用配置創(chuàng)建觸發(fā)器, 并為一組指定的ScheduledTimerTask bean自動創(chuàng)建Timer實例.
1. 引入Jar包: spring.jar, commons-logging.jar
2. 定時調(diào)度業(yè)務(wù)類:
/**
* 定時調(diào)度業(yè)務(wù)類
*/
public class TaskService extends TimerTask {
private int count = 1;
public void run() {
System.out.println("第" + count + "次執(zhí)行定時任務(wù)");
count++;
}
}
3. 核心配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="taskService" class="com.zdp.service.TaskService"></bean>
<bean id="scheduledTimerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask" ref="taskService" />
<!-- 每隔一天執(zhí)行一次配置: 24*60*60*1000 -->
<!-- 每1秒鐘程序執(zhí)行一次 -->
<property name="period" value="1000" />
<!-- 程序啟動4秒鐘后開始執(zhí)行 -->
<property name="delay" value="4000" />
</bean>
<bean id="timerFactoryBean" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledTimerTask" />
</list>
</property>
</bean>
</beans>
4. 測試類:
public class Main {
public static void main(String[] args) {
// 加載spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("<<-------- 啟動定時任務(wù) -------- >>");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
try {
if (reader.readLine().equals("quit")) {
System.out.println("<<-------- 退出定時任務(wù) -------- >>");
System.exit(0);
}
} catch (IOException e) {
throw new RuntimeException("error happens...", e);
}
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot屬性綁定與bean屬性校驗實現(xiàn)方法詳解
這篇文章主要介紹了SpringBoot屬性綁定與bean屬性校驗實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-11-11
解析Java中所有錯誤和異常的父類java.lang.Throwable
這篇文章主要介紹了Java中所有錯誤和異常的父類java.lang.Throwable,文章中簡單地分析了其源碼,說明在代碼注釋中,需要的朋友可以參考下2016-03-03
在SpringBoot環(huán)境中使用Mockito進行單元測試的示例詳解
Mockito是一個流行的Java?mocking框架,它允許開發(fā)者以簡單直觀的方式創(chuàng)建和使用模擬對象(mocks),Mockito特別適用于在Spring?Boot環(huán)境中進行單元測試,所以本文介紹了在SpringBoot環(huán)境中使用Mockito進行單元測試的示例,需要的朋友可以參考下2024-11-11
Spring-data-redis操作redis知識總結(jié)
這篇文章主要介紹了Spring-data-redis操作redis知識總結(jié),spring-data-redis是spring-data模塊的一部分,專門用來支持在spring管理項目對redis的操作。2017-04-04

