閱讀521 返回首頁    go 阿裏雲 go 技術社區[雲棲]


SpringBoot開發案例之整合定時任務(Scheduled)

來來來小夥伴們,基於上篇的郵件服務,定時任務就不單獨分項目了,天然整合進了郵件服務中。

不知道,大家在工作之中,經常會用到那些定時任務去執行特定的業務,這裏列舉一下我在工作中曾經使用到的幾種實現。

任務介紹

  • Java自帶的java.util.Timer類,這個類允許你調度一個java.util.TimerTask任務。Timer的優點在於簡單易用;缺點是Timer的所有任務都是由同一個線程調度的,因此所有任務都是串行執行的。同一時間隻能有一個任務在執行,前一個任務的延遲或異常都將會影響到之後的任務,不過這種實現已經被項目所廢棄。

  • 開源集群任務框架Quartz,這是一個功能比較強大的的調度器,適合做任務集群,解決單點故障,目前項目中在使用。

  • Spring家族自帶的Scheduled,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多,適用於簡單的任務,微服務使用很方便。

項目應用

創建任務

代碼中,可以發現,sendMail方法上注解被注釋掉了,目前我們采用的是xml配置實現的。

import org.springframework.stereotype.Component;
/**
 * 統計失敗郵件定時重新發送
 * 創建者 科幫網
 * 創建時間 2017年7月21日
 *
 */
@Component("sendMail")
public class SendMail {
    //@Scheduled(cron = "0/5 * * * * ?")
    public void sendMail() {
        System.out.println("統計失敗郵件定時重新發送開始");
    }
}

配置文件

 <!-- 配置任務線性池 -->
<task:executor   pool-size="5" /> 
<task:scheduler  pool-size="5"/>
<!-- 啟用注解驅動的定時任務 -->
<task:annotation-driven executor="executor" scheduler="scheduler"  proxy-target-/>
<task:scheduled-tasks scheduler="scheduler">
     <!-- 統計失敗郵件定時重新發送 -->
     <task:scheduled ref="sendMail" method="sendMail" cron="0/5 * * * * ?"/>  
</task:scheduled-tasks>

啟動項目

/**
 * 啟動類
 * 創建者 科幫網
 * 創建時間 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打印"統計失敗郵件定時重新發送開始"。當然Scheduled的功能不僅僅如此,我們查找源碼Scheduled類,可以發現還有一些注解屬性,這裏就不一一為大家介紹了。總之,要養成查看源碼API的習慣。

@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();
}

項目:https://git.oschina.net/52itstyle/spring-boot-mail

作者: 小柒

出處: https://blog.52itstyle.com

本文版權歸作者和雲棲社區所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁麵明顯位置給出, 如有問題, 可郵件(345849402@qq.com)谘詢。

最後更新:2017-07-23 20:41:50

  上一篇:go  CCAI 2017 | 中國工程院院士李德毅:L3的挑戰與量產
  下一篇:go  java 高並發、高性能、java後台框架 springmvc整合mybatis框架源碼