引言

相信大家对定时任务很熟悉,其重要性也不言而喻。定时发短信、定时批量操作、定时统计数据等,都离不开定时任务。本文将讲解定时任务在 SpringBoot 项目中的应用。

版本信息

JDK:1.8

SpringBoot :2.0.1.RELEASE

maven:3.3.9

IDEA:2019.1.1

quartz:2.3.0

定时任务实现方式

JDK自带的Timer

Timer 是Java 自带的定时任务类。可以用作比较简单的定时任务。通常用的不多。下面以一个小的示例展示其用法。

SpringBoot集成的schedule

这种方式是 SpringBoot 集成的,使用很简单。

首先,引入 SpringBoot 的基础 jar:

org.springframework.boot

spring-boot-starter

然后再启动类中添加注解 @EnableScheduling 即可开启 SpringBoot 定时任务:

@SpringBootApplication

@EnableScheduling

public class TimedTaskDemoApplication {

public static void main(String[] args) {

SpringApplication.run(TimedTaskDemoApplication.class, args);

}

}

下面根据 @Scheduled 的不同属性创建几个任务:

任务一:

@Component

public class FirstTask {

/**

* cron 表达式

*/

// @Scheduled(cron = "0/2 * * * * *")

@Scheduled(cron="${cron.schedule}")

public void run(){

System.out.println("这是创建的第一个定时任务");

}

}

作几点说明:

cron 表达式是 @Scheduled 的属性之一,其值可以直接设置为 cron 表达式;

@Scheduled(cron="${cron.schedule}") 是动态读取 application.properties 配置文件中的 cron 表达式。例如项目中的一个需求是每天凌晨0点执行,但是对于测试人员来说,不可能等到凌晨测试。动态读取可以帮助解决该问题。

任务二:

@Component

public class SecondTask {

/**

* 上一次执行完毕时间点之后多长时间再执行(ms)

*/

@Scheduled(fixedDelay = 2000)

public void run(){

System.out.println("这是创建的第二个定时任务");

}

}

任务三:

@Component

public class ThirdTask {

/**

* 与fixedDelay功能相同,上一次执行完毕时间点之后多长时间再执行(ms),区别是:1、时间是字符串;2、支持占位符

*/

// @Scheduled(fixedDelayString = "2000")

@Scheduled(fixedDelayString = "${time.fixedDelay}")

public void run(){

System.out.println("这是创建的第三个定时任务");

}

}

上面的三个任务列举了 @Scheduled 注解的三个参数。其实除此之外,查看 @Scheduled 的源码可知,还有其余的几个参数:

fixedRate:上一次开始执行时间点之后多长时间再执行;

fixedRateString:上一次开始执行时间点之后多长时间再执行;

fixedRateString:与fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符;

initialDelay:第一次延迟多长时间后再执行;

initialDelayString:与 initialDelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符;

整合Quartz

如果以上的方式都无法满足项目的需求,则可以试试 Quartz 调度框架。它功能的强大以及使用无需多说了。此处我们看看 Quartz 在 SpringBoot 中的使用。

创建项目,引入 Quartz 调度框架启动器:

org.springframework.boot

spring-boot-starter-quartz

需要注意版本信息,如果 SpringBoot 版本是2.0以后的版本,直接引入 Quartz 启动器即可。但是如果是2.0以前的版本,需要引入以下 jar 包:

org.quartz-scheduler

quartz

2.3.0

org.springframework

spring-context-support

下面创建任务了:

public class QuartzTask extends QuartzJobBean {

@Override

protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {

System.out.println(new Date());

}

}

任务需要继承 QuartzJobBean 抽象类,并重写 executeInternal 方法。

第三步,创建 quartz 配置类,添加 @Configuration 注解:

@Configuration

public class QuartzConfig {

@Bean

public JobDetail testQuartzTask() {

return JobBuilder.newJob(QuartzTask.class).withIdentity("quartztask").storeDurably().build();

}

@Bean

public Trigger testQuartzTrigger2() {

//cron方式,每隔5秒执行一次

return TriggerBuilder.newTrigger().forJob(testQuartzTask())

.withIdentity("quartztask")

.withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ?"))

.build();

}

}

上面的示例是使用 cron 表达式,当然也可以是固定时间间隔。本节是阐述 SpringBoot 和 Quartz 的整合,不作 Quartz 的详细使用。感兴趣的读者可以登录 Quartz 的官网 或者中文官网自行研究。

总结

定时任务的实现方式有很多种,除了上面说到的几种方式,还有利用线程池实现定时任务,有的系统是通过 Liunx 实现定时任务。总之,定时任务的实现方式多种多样,其方式要根据项目的实际情况而选。切不可为了实现而实现。

![](https://img2018.cnblogs.com/blog/1183871/201906/1183871-20190624133606968-1577940537.png)

springboot定时发送短信_SpringBoot第十七篇:定时任务相关推荐

  1. springboot定时发送短信_SpringBoot的定时任务

    SpringBoot提供了非常简单的定时任务配置方法,不再像之前需要配置很多Quartz的文件了. 首先看一个简单的静态任务: @Configuration @EnableScheduling @Sl ...

  2. springboot定时发送短信_springboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送)...

    websocket springboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送) 使用WebSocket构建交互式Web应用程序 本指南将引导您完成创建" ...

  3. springboot定时发送短信_阿里大于可以发送定时短信

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. springboot定时发送短信_Spring Boot 定时任务

    本文主要介绍了Spring Boot中使用@Scheduled创建定时任务.我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时添加 ...

  5. springboot定时发送短信_spring boot 1.5.4 定时任务和异步调用(十)

    1Spring Boot定时任务和异步调用 我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. sp ...

  6. 延迟发送:4款定时发送短信的应用程序

    发送短信已经成为朋友.家人甚至是同事之间最为常见的通讯方式之一.由于短信具备定时发送及发送报告等功能,使用起来非常灵活.当然,短信的应用程序中常常默认带有发送报告功能,而没有定时发送的功能,若是能具备 ...

  7. Spring Boot定时发送短信

    Spring Boot定时发送短信的两种方式 不少项目中估计都有遇到定时发送这个梗,我也遇到了,页面中下拉框选项有立即发送以及定时发送,立即发送就不用说了,定时发送可以讲一下,定时的方式有很多种,Ja ...

  8. MTK 7.1 定时发送短信功能

    此功能的主要设计思路是: 在短信添加附件的list列表中添加一个定时发送短信的选项,用户可以通过添加定时短信来设置短信要发送出去的时间,定时短信发送出去后,后台定时器会根据用户设置的时间进行定时判定, ...

  9. thinkphp6对接阿里云短信服务完成定时发送短信功能

    1.导入阿里短信包 通过composer下载依赖包 composer require alibabacloud/dysmsapi-20170525 2.0.22 具体可参见阿里云短信服务 >&g ...

最新文章

  1. MySQL存储日志并使用Loganalyzer作为前端展示
  2. Java 内存分配——Thinking in Java 4th 读书笔记
  3. 数字化转型生态的三个层级(平台 场景 工具/技术)
  4. GPS服务端解析程序编写日记
  5. python3.8新特性 逻辑表达式_Python3.8正式发布!新特性解析在这里
  6. js Blob对象介绍
  7. gcc和g++有什么区别?
  8. 不能访问win7计算机,局域网win7无法访问win10,win7访问不了局域网其他电脑
  9. oracle ro,ORACLE学习笔记一
  10. 【Elasticsearch】关于 Analyzers 的一切,第一部分
  11. Python Logging Formatter
  12. Cocos Creator 的实现拖尾效果
  13. DSP 程序远程升级 / Bootloader设计指南(一)—— 初识Bootloader/DSP引导流程
  14. Spring核心框架体系结构
  15. 当今世界最NB的25位大数据科学家
  16. 名帖55 隋代 楷书《苏孝慈墓志》
  17. QT QtableView操作详解
  18. ES, MongoDB, HBase的区别和使用场景
  19. 你会在场景中创建立体文字吗?可否认识精灵模型?
  20. 1、股票交易及量化投资回测分析系统的数据库设计-5

热门文章

  1. 选车真不是一件容易的事
  2. python中怎么绘制柱状簇_matplotlib中的簇状条形图?
  3. html表格引用bootcss样式,vue,渲染学生信息
  4. [Shell] awk FS,OFS,RS,ORS
  5. qq游戏大厅 for linux,QQ游戏(wine)版邀请使用,提供QQGame-wine deb包下载
  6. 不要钱的数据恢复软件?
  7. python驱动级模拟按键_Python实现windows下模拟按键和鼠标点击的方法
  8. 基于Servlet的图书借阅系统,万能项目,写毕设不用愁了
  9. leetcode **23. 合并K个升序链表(2020.4.26)
  10. AD自动布线经验/注意点/技巧