javascript
java定时器结合springboot_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("統計失敗郵件定時重新發送開始");
}
}
配置文件
啟動項目/**
* 啟動類
* 創建者 科幫網
* 創建時間 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();
}
總結
以上是生活随笔為你收集整理的java定时器结合springboot_SpringBoot开发案例之整合定时任务(Scheduled)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java第七章多线程_第七章 多线程
- 下一篇: mysql和mariadb可以同时使用吗