六、SpringBoot创建定时任务

概述

使用定时任务完成一些业务逻辑,比如天气接口的数据获取,定时发送短信,邮件。以及商城中每天用户的限额,定时自动收货等等。定时器在项目中是常常会使用到的一个手段。

一、 在启动类中加入开启定时任务的注解

在SpringBoot中使用定时任务相当的简单。首先,我们在启动类中加入@EnableScheduling来开启定时任务。

这里写图片描述

二、之后我们直接创建实现定时任务的Service即可

这里写图片描述

注解详解

@Scheduled

可以使用cron表达式来制定每分钟启动一次定时器,除了该表达式外,还可以使用fixedRate,fixedDelay等来作为时间配置。

这里写图片描述

**fixedRate:**上一次 启动时间点之后 X秒执行一次

**fixedDelay:**上一次 结束时间点之后 每X秒执行一次

**initialDelay:**第一次延迟 X秒执行,之后按照fixedRate的规则每X秒执行

默认情况下,如果什么都不进行配置,就会导致一个问题,系统中所有的定时任务都是使用的一个线程去执行的,也就是说,如果如果同一个时刻有2个定时任务需要执行,那么只可能有一个定时任务在执行,如果要解决这个问题可以定义一个自定的任务调度线程池即可。

cron表达式详解

一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。按顺序依次为:

  • 秒(0~59)
  • 分钟(0~59)
  • 3 小时(0~23)
  • 4 天(0~31)
  • 5 月(0~11)
  • 6 星期(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
  • 年份(1970-2099)

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于”月份中的日期”和”星期中的日期”这两个元素互斥的,必须要对其中一个设置。配置实例:

  • 每隔5秒执行一次:/5 * ?

  • 每隔1分钟执行一次:0 /1 ?

  • 0 0 10,14,16 ? 每天上午10点,下午2点,4点

  • 0 0/30 9-17 ? 朝九晚五工作时间内每半小时

  • 0 0 12 ? * WED 表示每个星期三中午12点

  • “0 0 12 ?” 每天中午12点触发

  • “0 15 10 ? “ 每天上午10:15触发

  • “0 15 10 ?” 每天上午10:15触发

  • “0 15 10 ? *” 每天上午10:15触发

多线程实现定时任务

可以看到三个定时任务都已经执行,并且使同一个线程中串行执行,如果只有一个定时任务,这样做肯定没问题,当定时任务增多,如果一个任务卡死,会导致其他任务也无法执行。 启动3个定时任务,每隔1s打印出一句话,观看是同一个线程打印的还是不同的线程打印的。

实现步骤:
1、在启动类上增加@EnableScheduling注解
2、配置一个类型为 TaskScheduler类型的bean (可以将这个类型的bean删除,看程序输出的结果)
3、编写一个任务类,每隔1s输出内容

首先编写启动类:

这里写图片描述

然后编写任务类:

这里写图片描述

执行结果:

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值