來來來小伙伴們,基于上篇的郵件服務(wù),定時任務(wù)就不單獨(dú)分項(xiàng)目了,天然整合進(jìn)了郵件服務(wù)中。
不知道,大家在工作之中,經(jīng)常會用到那些定時任務(wù)去執(zhí)行特定的業(yè)務(wù),這里列舉一下我在工作中曾經(jīng)使用到的幾種實(shí)現(xiàn)。
任務(wù)介紹
- Java自帶的java.util.Timer類,這個類允許你調(diào)度一個java.util.TimerTask任務(wù)。Timer的優(yōu)點(diǎn)在于簡單易用;缺點(diǎn)是Timer的所有任務(wù)都是由同一個線程調(diào)度的,因此所有任務(wù)都是串行執(zhí)行的。同一時間只能有一個任務(wù)在執(zhí)行,前一個任務(wù)的延遲或異常都將會影響到之后的任務(wù)。這種實(shí)現(xiàn)已經(jīng)被項(xiàng)目所廢棄。
- 開源集群任務(wù)框架Quartz,這是一個功能比較強(qiáng)大的的調(diào)度器,適合做任務(wù)集群,解決單點(diǎn)故障,目前項(xiàng)目中在使用。
- Spring家族自帶的Scheduled,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多,適用于簡單的任務(wù),微服務(wù)使用很方便。
項(xiàng)目應(yīng)用
創(chuàng)建任務(wù)
代碼中,可以發(fā)現(xiàn),sendMail方法上注解被注釋掉了,目前我們采用的是xml配置實(shí)現(xiàn)的。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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ā)送開始" ); } } |
配置文件
1
2
3
4
5
6
7
8
9
|
<!-- 配置任務(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 > |
啟動項(xiàng)目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/** * 啟動類 * 創(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( "項(xiàng)目啟動 " ); } } |
啟動后,控制臺會每5s打印”統(tǒng)計失敗郵件定時重新發(fā)送開始”。當(dāng)然Scheduled的功能不僅僅如此,我們查找源碼Scheduled類,可以發(fā)現(xiàn)還有一些注解屬性,這里就不一一為大家介紹了。總之,要養(yǎng)成查看源碼API的習(xí)慣。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@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.rar
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.52itstyle.com/archives/1280/?utm_source=tuicool&utm_medium=referral