项目中整合定时任务 | 学习笔记

简介: 快速学习 项目中整合定时任务

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot)项目中整合定时任务】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/667/detail/11508


项目中整合定时任务


目录:

一,什么是定时任务

二,如何实现定时任务


一,什么是定时任务

定时任务的说的官方点就是你可以在特定时间让你的程序自动去执行。

在现实生活中的例子:闹钟,闹钟在每天一个固定时间都会响。

这就是一个定时任务,比如每天早上我设置在早晨6点闹钟响,那每天早晨6点闹钟就会自动响起,这个就叫定时任务,是一个典型场景,而现在程序中也可以用定时任务,程序中定时任务有什么场景,如我要去生成数据,要手动去选择日期,点生成才可以做到。

即我们需要手动操作,这个操作确实没有问题。但实际中这种功能一般我们不喜欢手动操作,更喜欢自动完成,比如现在有个规则,每天凌晨1点把前一天数据自动执行。

统计到统计表中,让这个过程自动实现,而不需要每次手动。这就是定时任务。用定时任务方式不写页面,每天都自动操作,这就是它的一个场景。刚才的过程,通过程序完全自动化,接口自动化,加到表中。这就是一个场景,叫定时任务,像一个闹钟,就是一个典型的时间用场景。


二,如何实现定时任务

因为现在用的是,它在整个定时任务是特别方便的,定时任务该怎么去使用:

定时任务:在固定时间自动执行程序,不需要手动执行操作,能自动执行。

比如说我们现实生活中闹钟就是一个典型的任务场景。每天固定时间响起,我们可以让程序在每天固定时间操作比如生成数据功能,让它在每天凌晨一点把前一天的数据做统计。这就叫定时任务。用可以自动更方便的整合定时任务。

实现步骤:

1.在项目启动类添加注解

进入 statistics 模块,找到启动类 StaApplication,添加注解:@EnableScheduling 表示开始定时任务。

2. 创建定时类,在这个类里面使用表达式设置什么时候去执行

(1)cron 表达式用于设置什么时候执行或表达的规则。

创建类,类名随便写:添加一个包 schedule,在包里创建类,类名为 ScheduledTask,在类上方添加注解:@Component。

创建方法代码:

public class ScheduledTask {

//“0/5* * * * ?”表示每隔5秒钟执行一次这个方法

@Scheduled(cron = “0/5* * * * ?”) //固定写法,cron 表达示能制定什么时候执行

public void task1() {

System.out.println(“******task1执行了。。。”);

}

}

完成了,当启动程序时,会按照“0/5* * * * ?”表达示的规则去执行方法,也可以调接口。

演示一下,看效果。

进一步解释“0/5* * * * ?”表达示到底什么含义,该怎么去写。

启动后,如果正确,规则就会生效每隔5秒钟执行一次方法,task1执行后等待5秒又执行了一次,5秒后又执行一次,每隔5秒都会执行一次方法。

可以修改表达式把间隔时间设置长一些,如每天凌晨一点,每天12点执行,该规则都会做到。

cron 表达式设置执行规则,也成为七子表达式,也叫七域表达式。它不需要写,在网络上有针对这种表达式的生成工具,可以搜索在线生成 cron 表达式,如:http://cron.qqe2.com/

有的工具不好用时可以换其他工具。秒,分钟,小时,日,月,周,年有七种,所以叫七子表达式。

有7个组成部分,表达式分别对应不同部分。

年一般不指定,默认当前年份;周指星期一到星期天,月指1到12月,日指1到31号,小时指0到23时,有上午下午,上午指0到11时,下午指12到23时。

分钟指0到59分钟;秒指0到59秒,这是它的七个部分。

举例:

(1)“0/5* * * * ?”表示每隔5秒钟执行一次

在工具里秒的部分,选择从0秒开始,每5秒执行一次,这就是每隔5秒执行一次,下方生成了 cron 表达式“0/5* * * * ?”,与代码中表达式一致。该表达式有6位,可以再加1位。0/5* * * * * ?也可以。但是在代码中只能写6位,写7位会报错,它默认年为当前年。

添加一位成7位,表达式是对的。在整合时会报错。

(2)每天凌晨一点执行一次

每次工具下方都有执行过程包括执行时间。找小时,选择上午01时,生成 cron 表达式为:001**?*下方最近5次运行时间;15号1点,16号1点,17号一点等。

其他表达式用工具生成也一样,使用工具,选择想要的效果,自动生成。整合时仍然是6位,第7位不写。?表示任意。

修改代码;

public class ScheduledTask {

@Autowried

private StatisticsDailyService staService;

//“0/5* * * * ?”表示每隔5秒钟执行一次这个方法

@Scheduled(cron = “0/5* * * * ?”)//固定写法,cron 表达示能制定什么时候执行

public void task1() {

System.out.println(“******task1执行了。。。”);

}

//在每天凌晨1点,把前一天数据进行查询添加,如3月9号把3月8号的数据查询添加。

@Scheduled(cron = “001* * ?”)

public void task2() {

System.out.println(“******task2执行了。。。”);

staService.registerCount(): //调用方法

}

}

工具类 DataUtil.java,把它直接复制到新建的类 utils 中,该工具类可以取到日期。

调用 formatDate 方法得到当前日期,调用 addDays 方法调用前一天的日期。执行后看两个方法输出什么值,用在项目中。

值为当前日期3月14号,前一天日期3月13号,在每天凌晨1点,把前一天数据进行查询添加,调用 addDays 方法即可。

@Scheduled(cron = “001* * ?”)

public void task2() {

staService.registerCount(DataUtil.formatData(DataUtil.addDays(new Data(),-1): //调用方法

}

程序执行后会每天凌晨一点自动执行方法,查询添加前一天的数据。

通过代码主要掌握定时任务怎么整合,表达式怎么写即表达式的特点。定时任务在日常中很常见。

相关文章
|
消息中间件 Cloud Native Java
Spring Cloud Alibaba 2.2.7 版本正式发布
Spring Cloud Alibaba 是由阿里巴巴(后文简称:阿里)中间件团队于 2018 年 7 月开源,为业界提供的一套基于阿里内部分布式技术的一站式微服务构建解决方案。基于 Spring Cloud 微服务框架标准,针对微服务架构中的服务注册与发现、分布式消息、服务限流降级以及分布式事务等核心模块,都提供了相应的面向业界的成熟解决方案
1008 78
Spring Cloud Alibaba 2.2.7 版本正式发布
|
传感器 XML 物联网
Android项目实战(三十四):蓝牙4.0 BLE 多设备连接
原文:Android项目实战(三十四):蓝牙4.0 BLE 多设备连接   最近项目有个需求,手机设备连接多个蓝牙4.0 设备 并获取这些设备的数据。   查询了很多资料终于实现,现进行总结。   ------------------------------------------------...
1844 1
|
Linux 程序员
mac/linux中使用windwos软件,无缝兼容
作为一个程序员,如果不能为所欲为,那么生活将毫无意义。。。。 工作原因,经常在mac,linux和windows系统间切换,保存一个通用的软件环境很重要 有个开源的工具wine,可以在mac和linux上运行exe程序 然后有人商业或封装了下,使其变的非常好用 Crossover 官网地址:https://www.
1842 0
|
弹性计算 容灾 安全
阿里云ECS云服务器购买流程(图文详解)
2023阿里云ECS云服务器购买流程(图文详解),选购云服务器有两个入口,一个是选择活动机,只需要选择云服务器地域、系统、带宽即可;另一个是在云服务器页面,自定义选择云服务器配置,这种方式购买云服务器较为复杂,需要选付费方式、地域及可用区、ECS实例规格、镜像、网络、公网IP、安全组等配置
982 0
阿里云ECS云服务器购买流程(图文详解)
|
Java
震惊!【Eureka】发生Cannot execute request on any known server异常这样解决
震惊!【Eureka】发生Cannot execute request on any known server异常这样解决
745 0
震惊!【Eureka】发生Cannot execute request on any known server异常这样解决
|
SQL 安全 Oracle
5 款漏洞扫描工具:实用、强力、全面(含开源)(三)
5 款漏洞扫描工具:实用、强力、全面(含开源)
1698 0
5 款漏洞扫描工具:实用、强力、全面(含开源)(三)
|
数据采集 SQL 分布式计算
实践:搭建电商推荐系统|学习笔记
快速学习实践:搭建电商推荐系统
964 0
实践:搭建电商推荐系统|学习笔记
|
机器学习/深度学习 算法 语音技术
【语音识别】基于动态时间规整算法(DTW)实现中文语音识别系统含Matlab源码
【语音识别】基于动态时间规整算法(DTW)实现中文语音识别系统含Matlab源码
【语音识别】基于动态时间规整算法(DTW)实现中文语音识别系统含Matlab源码
|
存储 监控 数据可视化
全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台 (上)
全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台 (上)
608 0
全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台 (上)