詳解SpringBoot開發(fā)案例之整合定時任務(wù)(Scheduled)
來來來小伙伴們,基于上篇的郵件服務(wù),定時任務(wù)就不單獨分項目了,天然整合進(jìn)了郵件服務(wù)中。
不知道,大家在工作之中,經(jīng)常會用到那些定時任務(wù)去執(zhí)行特定的業(yè)務(wù),這里列舉一下我在工作中曾經(jīng)使用到的幾種實現(xiàn)。
任務(wù)介紹
- Java自帶的java.util.Timer類,這個類允許你調(diào)度一個java.util.TimerTask任務(wù)。Timer的優(yōu)點在于簡單易用;缺點是Timer的所有任務(wù)都是由同一個線程調(diào)度的,因此所有任務(wù)都是串行執(zhí)行的。同一時間只能有一個任務(wù)在執(zhí)行,前一個任務(wù)的延遲或異常都將會影響到之后的任務(wù)。這種實現(xiàn)已經(jīng)被項目所廢棄。
- 開源集群任務(wù)框架Quartz,這是一個功能比較強(qiáng)大的的調(diào)度器,適合做任務(wù)集群,解決單點故障,目前項目中在使用。
- Spring家族自帶的Scheduled,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多,適用于簡單的任務(wù),微服務(wù)使用很方便。
項目應(yīng)用
創(chuàng)建任務(wù)
代碼中,可以發(fā)現(xiàn),sendMail方法上注解被注釋掉了,目前我們采用的是xml配置實現(xiàn)的。
import org.springframework.stereotype.Component;
/**
* 統(tǒng)計失敗郵件定時重新發(fā)送
* 創(chuàng)建時間 2017年7月21日
*
*/
@Component("sendMail")
public class SendMail {
//@Scheduled(cron = "0/5 * * * * ?")
public void sendMail() {
System.out.println("統(tǒng)計失敗郵件定時重新發(fā)送開始");
}
}
配置文件
<!-- 配置任務(wù)線性池 --> <task:executor id="executor" pool-size="5" /> <task:scheduler id="scheduler" pool-size="5"/> <!-- 啟用注解驅(qū)動的定時任務(wù) --> <task:annotation-driven executor="executor" scheduler="scheduler" proxy-target-class="true"/> <task:scheduled-tasks scheduler="scheduler"> <!-- 統(tǒng)計失敗郵件定時重新發(fā)送 --> <task:scheduled ref="sendMail" method="sendMail" cron="0/5 * * * * ?"/> </task:scheduled-tasks>
啟動項目
/**
* 啟動類
* 創(chuàng)建時間 2017年7月19日
*
*/
@EnableAutoConfiguration
@ComponentScan(basePackages={"com.itstyle.main"})
@ImportResource({"classpath:spring-context-dubbo.xml","classpath:spring-context-task.xml"})
public class Application {
private static final Logger logger = Logger.getLogger(Application.class);
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(Application.class, args);
logger.info("項目啟動 ");
}
}
啟動后,控制臺會每5s打印”統(tǒng)計失敗郵件定時重新發(fā)送開始”。當(dāng)然Scheduled的功能不僅僅如此,我們查找源碼Scheduled類,可以發(fā)現(xiàn)還有一些注解屬性,這里就不一一為大家介紹了。總之,要養(yǎng)成查看源碼API的習(xí)慣。
@Target({ java.lang.annotation.ElementType.METHOD,
java.lang.annotation.ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {
public abstract String cron();
public abstract String zone();
public abstract long fixedDelay();
public abstract String fixedDelayString();
public abstract long fixedRate();
public abstract String fixedRateString();
public abstract long initialDelay();
public abstract String initialDelayString();
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Gateway自定義請求參數(shù)封裝的實現(xiàn)示例
這篇文章主要介紹了Spring Gateway自定義請求參數(shù)封裝的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
idea中提示Class 'xxx' is never us
這篇文章主要介紹了idea中提示Class 'xxx' is never used的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
java數(shù)據(jù)結(jié)構(gòu)之java實現(xiàn)棧
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)棧,需要的朋友可以參考下2014-03-03
java如何通過FileOutputStream字節(jié)流向文件中寫數(shù)據(jù)
這篇文章主要介紹了java如何通過FileOutputStream字節(jié)流向文件中寫數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
Java System.currentTimeMillis()時間的單位轉(zhuǎn)換與計算方式案例詳解
這篇文章主要介紹了Java System.currentTimeMillis()時間的單位轉(zhuǎn)換與計算方式案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08

