`
Anita558
  • 浏览: 12555 次
社区版块
存档分类
最新评论

Spring Boot (十一): Spring Boot 定时任务

 
阅读更多

 

Spring Boot (十一): Spring Boot 定时任务
 

 

在实际的项目开发工作中,我们经常会遇到需要做一些定时任务的工作,那么,在 Spring Boot 中是如何实现的呢?

1. 添加依赖

在 pom.xml 文件中只需引入 spring-boot-starter 的依赖即可:

代码清单:spring-boot-scheduler/pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

 

2. 配置文件

配置文件无需过多的配置:

代码清单:spring-boot-scheduler/src/main/resources/application.yml

server:
  port: 8080
spring:
  application:
    name: spring-boot-scheduler

 

3. 启动主类

启动主类需增加注解 @EnableScheduling 表示我们要开启定时任务这个服务。

代码清单:spring-boot-scheduler/src/main/java/com/springboot/springbootscheduler/SpringBootSchedulerApplication.java

@SpringBootApplication
@EnableScheduling
public class SpringBootSchedulerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootSchedulerApplication.class, args);
    }

}

 

4. 定时任务实现类

代码清单:spring-boot-scheduler/src/main/java/com/springboot/springbootscheduler/task/Task.java

@Component
public class Task {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    private final Logger logger = LoggerFactory.getLogger(Task.class);

    /**
     * cron表达式
     */
    @Scheduled(cron = "*/5 * * * * ?")
    private void task1() {
        logger.info("task1 正在执行,现在时间:{}", dateFormat.format(new Date()));
    }

    /**
     * 上一次开始执行时间点之后5秒再执行
     */
    @Scheduled(fixedRate = 5000)
    public void task2() {
        logger.info("task2 正在执行,现在时间:{}", dateFormat.format(new Date()));
    }

    /**
     * 上一次执行完毕时间点之后5秒再执行
     */
    @Scheduled(fixedDelay = 5000)
    public void task3() {
        logger.info("task3 正在执行,现在时间:{}", dateFormat.format(new Date()));
    }

    /**
     * 第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
     */
    @Scheduled(initialDelay = 1000, fixedRate = 5000)
    public void task4() {
        logger.info("task4 正在执行,现在时间:{}", dateFormat.format(new Date()));
    }
}

 

4.1 参数 cron

cron表达式语法:

[秒] [分] [小时] [日] [月] [周] [年]

 

注:[年]不是必须的域,可以省略[年],则一共6个域

说明 必填 允许填写的值 允许的通配符
0-59 , – * /
0-59 , – * /
0-23 , – * /
1-31 , – * ? / L W
1-12 / JAN-DEC , – * /
1-7 or SUN-SAT , – * ? / L #
1970-2099 , – * /

通配符说明:

  • * 表示所有值。 例如:在分的字段上设置 *,表示每一分钟都会触发。
  • ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为”?” 具体设置为 0 0 0 10 * ?
  • - 表示区间。例如 在小时上设置 “10-12”,表示 10,11,12点都会触发。
  • , 表示指定多个值,例如在周字段上设置 “MON,WED,FRI” 表示周一,周三和周五触发
  • / 用于递增触发。如在秒上面设置”5/15” 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置’1/3’所示每月1号开始,每隔三天触发一次。
  • L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在周字段上设置”6L”这样的格式,则表示“本月最后一个星期五”
  • W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上置”15W”,表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 “1W”,它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,”W”前只能设置具体的数字,不允许区间”-“)。
  • # 序号(表示每月的第几个周几),例如在周字段上设置”6#3”表示在每月的第三个周六.注意如果指定”#5”,正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) ;小提示:’L’和 ‘W’可以一组合使用。如果在日字段上设置”LW”,则表示在本月的最后一个工作日触发;周字段的设置,若使用英文字母是不区分大小写的,即MON与mon相同。

4.2 参数 zone

时区,接收一个java.util.TimeZone#ID。cron表达式会基于该时区解析。默认是一个空字符串,即取服务器所在地的时区。比如我们一般使用的时区Asia/Shanghai。该字段我们一般留空。

4.3 参数 fixedDelay 和 fixedDelayString

这两个参数其实含义是一样的,只是一个使用的是 Long 类型,一个使用的是 String 类型。

含义都是上一次执行完毕时间点之后多长时间再执行,具体使用示例在上面的代码中已经给出。

4.4 参数 fixedRate 和 fixedRateString

这一组参数和上面的那组参数也是一样的,同样的是类型不同,含义是上一次开始执行时间点之后多长时间再执行。

4.5 参数 initialDelay 和 initialDelayString

这组参数的含义是第一次延迟多长时间后再执行。

4.6 附上 org.springframework.scheduling.annotation.Scheduled

@Scheduled 注解的使用方式其实在源码里已经讲的很清楚了,这里附上供大家参考:

 
Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {

    /**
     * A special cron expression value that indicates a disabled trigger: {@value}.
     * <p>This is primarily meant for use with ${...} placeholders, allowing for
     * external disabling of corresponding scheduled methods.
     * @since 5.1
     */
    String CRON_DISABLED = "-";

    /**
     * A cron-like expression, extending the usual UN*X definition to include triggers
     * on the second as well as minute, hour, day of month, month and day of week.
     * <p>E.g. {@code "0 * * * * MON-FRI"} means once per minute on weekdays
     * (at the top of the minute - the 0th second).
     * <p>The special value {@link #CRON_DISABLED "-"} indicates a disabled cron trigger,
     * primarily meant for externally specified values resolved by a ${...} placeholder.
     * @return an expression that can be parsed to a cron schedule
     * @see org.springframework.scheduling.support.CronSequenceGenerator
     */
    String cron() default "";

    /**
     * A time zone for which the cron expression will be resolved. By default, this
     * attribute is the empty String (i.e. the server's local time zone will be used).
     * @return a zone id accepted by {@link java.util.TimeZone#getTimeZone(String)},
     * or an empty String to indicate the server's default time zone
     * @since 4.0
     * @see org.springframework.scheduling.support.CronTrigger#CronTrigger(String, java.util.TimeZone)
     * @see java.util.TimeZone
     */
    String zone() default "";

    /**
     * Execute the annotated method with a fixed period in milliseconds between the
     * end of the last invocation and the start of the next.
     * @return the delay in milliseconds
     */
    long fixedDelay() default -1;

    /**
     * Execute the annotated method with a fixed period in milliseconds between the
     * end of the last invocation and the start of the next.
     * @return the delay in milliseconds as a String value, e.g. a placeholder
     * or a {@link java.time.Duration#parse java.time.Duration} compliant value
     * @since 3.2.2
     */
    String fixedDelayString() default "";

    /**
     * Execute the annotated method with a fixed period in milliseconds between
     * invocations.
     * @return the period in milliseconds
     */
    long fixedRate() default -1;

    /**
     * Execute the annotated method with a fixed period in milliseconds between
     * invocations.
     * @return the period in milliseconds as a String value, e.g. a placeholder
     * or a {@link java.time.Duration#parse java.time.Duration} compliant value
     * @since 3.2.2
     */
    String fixedRateString() default "";

    /**
     * Number of milliseconds to delay before the first execution of a
     * {@link #fixedRate()} or {@link #fixedDelay()} task.
     * @return the initial delay in milliseconds
     * @since 3.2
     */
    long initialDelay() default -1;

    /**
     * Number of milliseconds to delay before the first execution of a
     * {@link #fixedRate()} or {@link #fixedDelay()} task.
     * @return the initial delay in milliseconds as a String value, e.g. a placeholder
     * or a {@link java.time.Duration#parse java.time.Duration} compliant value
     * @since 3.2.2
     */
    String initialDelayString() default "";

}
 

 

1
0
分享到:
评论

相关推荐

    Beginning Spring Boot 2 Applications and Microservices with the Spring Framework

    This book will help you understand what Spring Boot is, how Spring Boot helps you build Spring-based applications quickly and easily, and the inner workings of Spring Boot using easy-to-follow ...

    spring-boot实战PDF 完整版和随书源码.7z

    《Spring Boot实战》是一本深度剖析Spring Boot框架的实践指南,旨在帮助开发者快速掌握Spring Boot的核心概念和技术。这本书深入浅出地介绍了如何使用Spring Boot构建高效、简洁的Java应用程序。随书源码提供了丰富...

    Pro Spring Boot 2第2版-2009-EPUB版

    Pro Spring Boot 2: An Authoritative Guide to Building Microservices, Web and Enterprise Applications, and Best Practices Quickly and productively develop complex Spring applications and microservices...

    Spring boot 示例 官方 Demo

    spring-boot-scheduler:spring boot和定时任务案例 spring-boot-web:web开发综合使用案例 spring-boot-mail:spring boot和邮件服务 spring-boot-mongodb:spring boot和mongodb的使用 spring-boot-multi-mongodb...

    Beginning Spring Boot 2 Applications and Microservices with the Spring epub

    Beginning Spring Boot 2 Applications and Microservices with the Spring Framework 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Spring Boot Examples

    spring-boot-scheduler:spring boot和定时任务案例 spring-boot-web:web开发综合使用案例 spring-boot-mail:spring boot和邮件服务 spring-boot-mongodb:spring boot和mongodb的使用 spring-boot-multi-...

    Learning Spring Boot 2.0 Second Edition

    《Learning Spring Boot 2.0 Second Edition》是学习Spring Boot 2.0的重要参考资料,它深入浅出地介绍了这个流行的Java开发框架的核心概念和技术。Spring Boot简化了Spring应用程序的初始搭建以及开发过程,旨在...

    从零开始学Spring Boot

    从零开始学Spring Boot,没有积分的可以...(1)spring boot起步之Hello World【从零开始学Spring Boot】: http://412887952-qq-com.iteye.com/blog/2291500 (2)Spring Boot返回json数据【从零开始学Spring Boot】 ...

    spring-boot-cli下载

    Spring Boot CLI(命令行接口)是Spring框架的一个重要工具,它简化了基于Spring的应用程序开发。这个工具允许开发者快速地创建、运行和测试Spring应用程序,无需进行大量的项目配置。我们来详细了解一下`spring-...

    spring-boot-configuration-processor-2.3.12.RELEASE-API文档-中文版.zip

    赠送jar包:spring-boot-configuration-processor-2.3.12....Maven坐标:org.springframework.boot:spring-boot-configuration-processor:2.3.12.RELEASE; 标签:springframework、boot、spring、configuration、proc

    Spring Boot 2 Recipes

    获取Spring Boot 2微框架的可重用代码配方和代码段 了解Spring Boot 2如何与其他Spring API,工具和框架集成 访问Spring MVC和新的Spring Web Sockets,以实现更简单的Web开发 使用微服务进行Web服务开发并与Spring ...

    Beginning Spring Boot 2 (epub, mobi, pdf, source code)

    Beginning Spring Boot 2 - K. Siva Prasad Reddy. Learn Spring Boot and how to build Java-based enterprise, web, and microservice applications with it. In this book, you'll see how to work with ...

    about learning Spring Boot. Spring Boot 教程、技术栈示例代码,快速简单上手教程.zip

    Spring Boot 学习示例 Spring Boot 2.0 Mysql 5.6 JDK 1.8 Maven license Spring Boot 使用的各种示例,以最简单、最实用为标准,此开源...spring-boot-scheduler:Spring Boot 3.0 定时任务 scheduler 使用示例 .....

    Spring Boot参考指南-1.4.1.RELEASE

    GitBook : Spring Boot参考指南 整合示例:程序猿DD-Spring Boot教程 Email:qibaoguang@gmail.com 从这里开始 交流群: spring boot最佳实践2 : 460560346 spring boot最佳实践( 已满) :445015546 注 1.3版本...

    spring-boot-2.3.12.RELEASE-API文档-中文版.zip

    Maven坐标:org.springframework.boot:spring-boot:2.3.12.RELEASE; 标签:springframework、boot、spring、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览...

    Spring Boot 学习笔记完整教程.pdf

    9. Spring Boot任务调度:了解如何在Spring Boot中实现定时任务和异步任务。 10. Spring Boot集成测试:学习如何进行集成测试,包括使用JUnit和Mockito等工具。 11. Spring Boot热部署:了解热部署的原理,以及...

    Spring Boot中的@Scheduled注解:定时任务的原理与实现

    ### Spring Boot中的@Scheduled注解:定时任务的原理与实现 #### 一、引言 在现代软件开发中,定时任务是一种非常常见的需求。无论是数据同步、定期清理缓存还是发送提醒邮件,都需要应用程序能够在特定的时间点...

Global site tag (gtag.js) - Google Analytics