詳解SpringBoot開發(fā)案例之整合定時(shí)任務(wù)(Scheduled)
來來來小伙伴們,基于上篇的郵件服務(wù),定時(shí)任務(wù)就不單獨(dú)分項(xiàng)目了,天然整合進(jìn)了郵件服務(wù)中。
不知道,大家在工作之中,經(jīng)常會(huì)用到那些定時(shí)任務(wù)去執(zhí)行特定的業(yè)務(wù),這里列舉一下我在工作中曾經(jīng)使用到的幾種實(shí)現(xiàn)。
任務(wù)介紹
- Java自帶的java.util.Timer類,這個(gè)類允許你調(diào)度一個(gè)java.util.TimerTask任務(wù)。Timer的優(yōu)點(diǎn)在于簡(jiǎn)單易用;缺點(diǎn)是Timer的所有任務(wù)都是由同一個(gè)線程調(diào)度的,因此所有任務(wù)都是串行執(zhí)行的。同一時(shí)間只能有一個(gè)任務(wù)在執(zhí)行,前一個(gè)任務(wù)的延遲或異常都將會(huì)影響到之后的任務(wù)。這種實(shí)現(xiàn)已經(jīng)被項(xiàng)目所廢棄。
- 開源集群任務(wù)框架Quartz,這是一個(gè)功能比較強(qiáng)大的的調(diào)度器,適合做任務(wù)集群,解決單點(diǎn)故障,目前項(xiàng)目中在使用。
- Spring家族自帶的Scheduled,可以將它看成一個(gè)輕量級(jí)的Quartz,而且使用起來比Quartz簡(jiǎn)單許多,適用于簡(jiǎn)單的任務(wù),微服務(wù)使用很方便。
項(xiàng)目應(yīng)用
創(chuàng)建任務(wù)
代碼中,可以發(fā)現(xiàn),sendMail方法上注解被注釋掉了,目前我們采用的是xml配置實(shí)現(xiàn)的。
import org.springframework.stereotype.Component;
/**
* 統(tǒng)計(jì)失敗郵件定時(shí)重新發(fā)送
* 創(chuàng)建時(shí)間 2017年7月21日
*
*/
@Component("sendMail")
public class SendMail {
//@Scheduled(cron = "0/5 * * * * ?")
public void sendMail() {
System.out.println("統(tǒng)計(jì)失敗郵件定時(shí)重新發(fā)送開始");
}
}
配置文件
<!-- 配置任務(wù)線性池 --> <task:executor id="executor" pool-size="5" /> <task:scheduler id="scheduler" pool-size="5"/> <!-- 啟用注解驅(qū)動(dòng)的定時(shí)任務(wù) --> <task:annotation-driven executor="executor" scheduler="scheduler" proxy-target-class="true"/> <task:scheduled-tasks scheduler="scheduler"> <!-- 統(tǒng)計(jì)失敗郵件定時(shí)重新發(fā)送 --> <task:scheduled ref="sendMail" method="sendMail" cron="0/5 * * * * ?"/> </task:scheduled-tasks>
啟動(dòng)項(xiàng)目
/**
* 啟動(dòng)類
* 創(chuàng)建時(shí)間 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("項(xiàng)目啟動(dòng) ");
}
}
啟動(dòng)后,控制臺(tái)會(huì)每5s打印”統(tǒng)計(jì)失敗郵件定時(shí)重新發(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();
}
項(xiàng)目:spring-boot-mail_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot?整合?Quartz?定時(shí)任務(wù)框架詳解
- springboot整合xxl-job實(shí)現(xiàn)分布式定時(shí)任務(wù)的過程
- SpringBoot整合Quartz實(shí)現(xiàn)定時(shí)任務(wù)詳解
- springboot整合Quartz實(shí)現(xiàn)動(dòng)態(tài)配置定時(shí)任務(wù)的方法
- springboot整合quartz實(shí)現(xiàn)定時(shí)任務(wù)示例
- SpringBoot定時(shí)任務(wù)兩種(Spring Schedule 與 Quartz 整合 )實(shí)現(xiàn)方法
- SpringBoot整合定時(shí)任務(wù)的方法
相關(guān)文章
jdk中keytool的使用以及如何提取jks文件中的公鑰和私鑰
JKS文件由公鑰和密鑰構(gòu)成利用Java?Keytool工具生成的文件,它是由公鑰和密鑰構(gòu)成的,下面這篇文章主要給大家介紹了關(guān)于jdk中keytool的使用以及如何提取jks文件中公鑰和私鑰的相關(guān)資料,需要的朋友可以參考下2024-03-03
Java實(shí)現(xiàn)的并發(fā)任務(wù)處理實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)的并發(fā)任務(wù)處理方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了基于線程操作并發(fā)任務(wù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Java socket通訊實(shí)現(xiàn)過程及問題解決
這篇文章主要介紹了Java socket通訊實(shí)現(xiàn)過程及問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
關(guān)于任務(wù)調(diào)度框架quartz使用(異常處理,解決恢復(fù)后多次調(diào)度處理)
這篇文章主要介紹了關(guān)于任務(wù)調(diào)度框架quartz使用(異常處理,解決恢復(fù)后多次調(diào)度處理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

