SpringBoot中使用@Scheduled创建定时任务

SpringBoot中使用@Scheduled创建定时任务

定时任务一般会在很多项目中都会用到,我们往往会间隔性的的去完成某些特定任务来减少服务器和数据库的压力。比较常见的就是金融服务系统推送回调,一般支付系统订单在没有收到成功的回调返回内容时会持续性的回调,这种回调一般都是定时任务来完成的。还有就是报表的生成,我们一般会在客户访问量过小的时候来完成这个操作,那往往都是在凌晨。这时我们也可以采用定时任务来完成逻辑。SpringBoot为我们内置了定时任务,我们只需要一个注解@Scheduled就可以开启定时任务了。

一,在pom.xml文件中加入依赖

 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.6.RELEASE</version>
</parent>

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

二,创建启动类上添加注解@SpringBootApplication@EnableScheduling

@SpringBootApplication
@EnableCaching
@EnableScheduling
public class SpringApplication {

    public static void main(String[] args) {

        SpringApplication.run(SpringApplication.class, args);

    }
}

三,创建类ScheduledTask用来演示定时任务

使用@scheduled注解来演示定时执行任务的方式
我们通过@scheduled注解用来配置到方法上来完成对应的定时任务的配置,如执行时间,间隔时间,延迟时间等等,下面我们就来详细的看下对应的属性配置。
@Component这个注解可以在程序启动时自动将该类加载进来

fixedDelay属性

该属性是程序启动后每3000ms执行一次

@Component
public class ScheduledTask {

    @Autowired
    public QuartzJobService quartzJobService;

    private static int count1=1;
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    @Scheduled(fixedDelay = 3000)
    public void fixedDelay() {
        System.out.println(String.format("第%s次执行,当前时间为:%s", count1++, dateFormat.format(new Date(System.currentTimeMillis()))));
    }

}

cron属性

这是一个时间表达式,可以通过简单的配置就能完成各种时间的配置,我们通过CRON表达式几乎可以完成任意的时间搭配,它包含了六或七个域:
Seconds : 可出现", - * /"四个字符,有效范围为0-59的整数
Minutes : 可出现", - * /"四个字符,有效范围为0-59的整数
Hours : 可出现", - * /"四个字符,有效范围为0-23的整数
DayofMonth : 可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
Month : 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek : 可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
Year : 可出现", - * /"四个字符,有效范围为1970-2099年

推荐一个在线Cron表达式生成器http://cron.qqe2.com/

几个简单例子

"0 0 12 * * ?" 每天中午十二点触发
"0 15 10 ? * " 每天早上10:15触发
"0 15 10
* ?" 每天早上10:15触发
"0 15 10 * * ? " 每天早上10:15触发
"0 15 10
* ? 2005" 2005年的每天早上10:15触发
"0 * 14 * * ?" 每天从下午2点开始到2点59分每分钟一次触发
"0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发

fixedRate属性

该属性的含义是上一个调用开始后再次调用的延时(不用等待上一次调用完成),这样就会存在重复执行的问题,所以不是建议使用,但数据量如果不大时在配置的间隔时间内可以执行完也是可以使用的。

@Scheduled(fixedRate = 1000)
    public void fixedRate() throws InterruptedException {
        Thread.sleep(2000);
        System.out.println(String.format("1第%s次执行,当前时间为:%s", count1++, dateFormat.format(new Date(System.currentTimeMillis()))));
    }
initialDelay属性

该属性的作用是第一次执行延迟时间

 @Scheduled(initialDelay=1000,fixedDelay = 3000)
    public void initialDelay() {
        System.out.println(String.format("1第%s次执行,当前时间为:%s", count1++, dateFormat.format(new Date(System.currentTimeMillis()))));
    }

注意:上面所有属性的配置时间单位都是毫秒

原文地址:https://www.cnblogs.com/mengw/p/11564338.html

时间: 2024-11-09 01:19:04

SpringBoot中使用@Scheduled创建定时任务的相关文章

spring-boot实战【09】【转】:Spring Boot中使用@Scheduled创建定时任务

我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. 创建定时任务 在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务,实现每过5秒输出一下当前时间. 在Spring Boot的主类中加入@EnableScheduling注解,启用定时任务的配置 1 2 3 4 5 6 7 8 9 10 @SpringBootApplication @E

SpringBoot中使用Scheduling执行定时任务

SpringBoot自带的 Schedule,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多以下任务都是在单线程下执行的第一步 创建SpringBoot项目第二步 添加@EnableScheduling开启定时任务第三步 设置定时需要执行的任务有两种方法设置执行时机第一种我们就且叫他为普通方法1.fixedRate:会为所有任务的开始执行时间编排一个表,假如fixedRate=5000,且第一次开始时间是10:00:00任务 开始执行时间任务1 10:00:00任务2

Springboot之使用Scheduled做定时任务

定时任务有好多开源框架比如Quartz,@Scheduled是Spring的一个定时任务注解,通过注解配置就能够轻量级的定时任务,简单方便. 一.@Scheduled注解介绍 这里先贴上@Scheduled注解.然后下面的这几个属性的介绍. * Copyright 2002-2018 the original author or authors. package org.springframework.scheduling.annotation; import java.lang.annotat

Springboot解决使用@Scheduled创建任务时无法在同一时间执行多个任务的BUG

1.在启动类使用 @SpringBootApplication @EnableJpaRepositories(repositoryFactoryBeanClass = MyRepositoryFactoryBean.class) @EnableTransactionManagement @EnableAutoConfiguration //@EnableAutoConfiguration(exclude = {org.springframework.boot.autoconfigure.secu

SpringBoot 中使用计划任务

在 SpringBoot 中使用 @Scheduled 十分简单,只需在方法上加上 @Scheduled 注释即可. import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @Component public

SpringBoot创建定时任务

之前总结过spring+quartz实现定时任务的整合http://www.cnblogs.com/gdpuzxs/p/6663725.html,而springboot创建定时任务则是相当简单. (1)在springboot主类中@EnableScheduling注解,启用定时任务的配置,如下: (2)创建定时任务实现类,如下: package springboot.web; import java.text.SimpleDateFormat; import java.util.Date; im

Springboot定时任务原理及如何动态创建定时任务

一.前言 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝.分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件.因为是多省份,服务器.文件名规则.数据规则都不一定,所以要做成可配置是有一定难度的.数据规则这块必须强烈要求统一,服务器.文件名规则都可以从配置中心去读.每新增一个省份的配置,后台感知到后,动态生成定时任务. 二.Springboot引入定时任务核心配置 @Target(ElementType.TYPE) @Retention(RetentionPolicy

SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了)

# 一.在JAVA开发领域,目前可以通过以下几种方式进行定时任务 1.单机部署模式 Timer:jdk中自带的一个定时调度类,可以简单的实现按某一频度进行任务执行.提供的功能比较单一,无法实现复杂的调度任务. ScheduledExecutorService:也是jdk自带的一个基于线程池设计的定时任务类.其每个调度任务都会分配到线程池中的一个线程执行,所以其任务是并发执行的,互不影响. Spring Task:Spring提供的一个任务调度工具,支持注解和配置文件形式,支持Cron表达式,使用

在SpringBoot中配置定时任务

前言 之前在spring中使用过定时任务,使用注解的方式配置很方便,在SpringBoot中的配置基本相同,只是原来在spring中的xml文件的一些配置需要改变,在SpringBoot中也非常简单. 已经加入我的github模版中:https://github.com/LinkinStars/springBootTemplate 定时任务的分类 所谓定时任务,就是在项目启动之后,定时的去执行一个任务,从而满足业务的需要. 定时任务分为下面几种,串行,并行,同步,异步 串行,并行:当配置了多个定