2021年7月15日星期四

Spring Boot 2.x基础教程:使用@Scheduled实现定时任务

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

创建定时任务

在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务,实现每过5秒输出一下当前时间。

  • 在Spring Boot的主类中加入@EnableScheduling注解,启用定时任务的配置
@SpringBootApplication@EnableSchedulingpublic class Application {	public static void main(String[] args) {		SpringApplication.run(Application.class, args);	}}
  • 创建定时任务实现类
@Componentpublic class ScheduledTasks { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate = 5000) public void reportCurrentTime() {  log.info("现在时间:" + dateFormat.format(new Date())); }}
  • 运行程序,控制台中可以看到类似如下输出,定时任务开始正常运作了。
2021-07-13 14:56:56.413 INFO 34836 --- [   main] c.d.chapter71.Chapter71Application  : Started Chapter71Application in 1.457 seconds (JVM running for 1.835)2021-07-13 14:57:01.411 INFO 34836 --- [ scheduling-1] com.didispace.chapter71.ScheduledTasks : 现在时间:14:57:012021-07-13 14:57:06.412 INFO 34836 --- [ scheduling-1] com.didispace.chapter71.ScheduledTasks : 现在时间:14:57:062021-07-13 14:57:11.413 INFO 34836 --- [ scheduling-1] com.didispace.chapter71.ScheduledTasks : 现在时间:14:57:112021-07-13 14:57:16.413 INFO 34836 --- [ scheduling-1] com.didispace.chapter71.ScheduledTasks : 现在时间:14:57:16

@Scheduled详解

在上面的入门例子中,使用了@Scheduled(fixedRate = 5000) 注解来定义每过5秒执行的任务。对于@Scheduled的使用,我们从源码里看看有哪些配置:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Repeatable(Schedules.class)public @interface Scheduled {	String CRON_DISABLED = ScheduledTaskRegistrar.CRON_DISABLED;	String cron() default "";	String zone() default "";	long fixedDelay() default -1;	String fixedDelayString() default "";	long fixedRate() default -1;	String fixedRateString() default "";	long initialDelay() default -1;	String initialDelayString() default "";}

这些具体配置信息的含义如下:

  • cron:通过cron表达式来配置执行规则
  • zone:cron表达式解析时使用的时区
  • fixedDelay:上一次执行结束到下一次执行开始的间隔时间(单位:ms)
  • fixedDelayString:上一次任务执行结束到下一次执行开始的间隔时间,使用java.time.Duration#parse解析
  • fixedRate:以固定间隔执行任务,即上一次任务执行开始到下一次执行开始的间隔时间(单位:ms),若在调度任务执行时,上一次任务还未执行完毕,会加入worker队列,等待上一次执行完成后立即执行下一次任务
  • fixedRateString:与fixedRate逻辑一致,只是使用java.time.Duration#parse解析
  • initialDelay:首次任务执行的延迟时间
  • initialDelayString:首次任务执行的延迟时间,使用java.time.Duration#parse解析

思考与进阶

是不是这样实现定时任务很简单呢?那么继续思考一下这种实现方式是否存在......

原文转载:http://www.shaoqun.com/a/878537.html

跨境电商:https://www.ikjzd.com/

勤商网:https://www.ikjzd.com/w/2219

敦煌网:https://www.ikjzd.com/w/189

easy buy:https://www.ikjzd.com/w/2162


我们在编写SpringBoot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。创建定时任务在SpringBoot中编写定时任务是非常简单的事,下面通过实例介绍如何在SpringBoot中创建定时任务,实现每过5秒输出一下当前时间。在SpringBoot的主类中加入@EnableScheduling注解,启用定时任务的配置@Spr
如何挑选风筝?风筝的种类有哪些 :http://www.30bags.com/a/435905.html
如何挑选好的婚纱摄影机构?:http://www.30bags.com/a/403265.html
如何挑选日本和服,最佳摄影拍摄地,京都来这没错了:http://www.30bags.com/a/245580.html
如何玩转杭州,杭州游玩必去的地方,杭州旅游攻略:http://www.30bags.com/a/425440.html
老师你下面太紧进不去 老师脱下裙子坐在我的巨物上:http://lady.shaoqun.com/a/247572.html
小姨子口述:老公不在家我与姐夫滚床单:http://lady.shaoqun.com/m/a/85067.html
口述:少妇床技太好我偷情一次就上瘾少妇男人一次:http://lady.shaoqun.com/m/a/41142.html
和两个黑人同时做 我被两个老外抱着高爽翻了:http://www.30bags.com/m/a/249821.html
亚马逊运营QA集锦(1941-1950):https://www.ikjzd.com/articles/146628
不小心和同事发生关系怎么办?听听这四个女人的处理方法!:http://lady.shaoqun.com/a/422152.html
聚势而为,权益加倍:Airwallex空中云汇新举措助跨境电商生态共同繁荣:https://www.ikjzd.com/articles/146633
独立站商品测品小技巧:https://www.ikjzd.com/articles/146632

没有评论:

发表评论