湖南省建设资源人才网站,万江建设网站,中国芯片三巨头,手表网站制作照片定时任务的几种实现方式#xff1a;Timer#xff1a;Java自带的java.util.Timer类#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行#xff0c;但不能在指定时间运行。一般用的较少。Quartz#xff1a;使用QuartzTimerJava自带的java.util.Timer类这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行但不能在指定时间运行。一般用的较少。Quartz使用Quartz这是一个功能比较强大的的调度器可以让你的程序在指定时间执行也可以按照某一个频度执行配置起来稍显复杂。Spring TaskSpring3.0以后自带的task可以将它看成一个轻量级的Quartz而且使用起来比Quartz简单许多。目标在 SpringBoot 项目实现每秒打印一次当前时间实战第一步添加依赖引入 Spring Boot Starter 父工程添加 spring-boot-starter-web 的依赖添加后的整体依赖如下第二步编写启动类第三步编写定时任务调度类通过 EnableScheduling 注解开启定时任务调度功能通过 Scheduled 注解在需要执行的方法上使用 cronExpression 表达式定义定时任务的执行策略文章最后会详细讲解 cronExpression 表达式第四步验证启动项目查看日志time : 07:23:45time : 07:23:46time : 07:23:47time : 07:23:48time : 07:23:49源码地址本章源码 : https://gitee.com/gongm_24/spring-boot-tutorial.git扩展cronExpression 表达式表达式结构秒 分钟 小时 日期 月份 星期 年配置说明特殊字符说明星号(*)可用在所有字段下表示对应时间域名的每一个时刻如*用在分钟字段表示“每分钟”。问号(?)只能用在日期和星期字段代表无意义的值比如使用L设定为当月的最后一天则配置日期配置就没有意义了可用作占位符的作用。减号(-)表示一个范围如在日期字段5-10表示从五号到10号相当于使用逗号的5,6,7,8,9,10逗号(,)表示一个并列有效值比如在月份字段使用JAN,DEC表示1月和12月斜杠(/)x/y表示一个等步长序列x为起始值y为增量步长值如在小时使用1/3相当于1,4,7,10当时用*/y时相当于0/yLL(Last)只能在日期和星期字段使用但意思不同。在日期字段表示当月最后一天在星期字段表示星期六(如果按星期天为一星期的第一天的概念星期六就是最后一天。如果L在星期字段且前面有一个整数值X表示“这个月的最后一个星期X”比如3L表示某个月的最后一个星期二。W选择离给定日期最近的工作日(周一至周五)。例如你指定“15W”作为day of month字段的值就意味着“每个月与15号最近的工作日”。所以如果15号是周六则触发器会在14号(周五)触发。如果15号是周日则触发器会在16号(周一)触发。如果15号是周二则触发器会在15号(周二)触发。但是如果你指定“1W”作为day of month字段的值且1号是周六则触发器会在3号(周一)触发。quartz不会“跳出”月份的界限。LW组合在日期字段可以组合使用LW,表示当月最后一个工作日(周一至周五)井号(#)只能在星期字段中使用指定每月第几个星期X。例如day of week字段的“63”就意味着“每月第3个星期五”(day3星期五3第三个)“21”就意味着“每月第1个星期一”“45”就意味着“每月第5个星期3。需要注意的是“5”如果在当月没有第5个星期三则触发器不会触发。C只能在日期和星期字段中使用表示计划所关联的诶其如果日期没有被关联相当于日历中的所有日期如5C在日期字段相当于5号之后的第一天1C在日期字段使用相当于星期填后的第一天示例