Springboot定时任务以及优缺点

为什么要使用定时任务

众所周知,我们在做一个项目的过程中,除了人工触发一些任务外,有很多功能是需要它自动去运行。
比如说商品订单的自动审核,自动定时流转状态等等,这些都是需要用到定时去完成,而不是简简单单的每次都通过人工去操作。毕竟如果有些任务是大半夜的,这得多折腾人。
因此,定时任务的必要性就此体现出来了。

介绍

定时任务可以自己开发,也可以使用一些轻量级分布式任务调度平台,类似于xxl-job
https://github.com/xuxueli/xxl-job
这里我们介绍的是springboot自带的定时任务调度方法@Scheduled。

代码

一、
首先我们创建一个类,并且加上@Component注解,确保可以被扫描。
然后我们在方法上加上这里要用到的定时任务注解@Scheduled()
其中,有个参数 cron="",是用来写入cron表达式的,也就是通过这个用来填写定时任务的任务时间。

代码:

import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class CronJob {

    @Scheduled(cron = "0/5 * * * * ?")
    public void autoGetMessage(){
        System.out.println("当期执行时间:" + new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date()));
    }
}

cron怎么写的话,这里不做过多的讲解,可以直接上网址https://www.bejson.com/othertools/cron/,在网址中填写需要的时间,直接生成cron表达式,有时间的话也可以学习一下下面的表达式的语言,这个很简单,学起来很快。

cron网站操作如下:
在这里插入图片描述
试运行问题解决:
这里开始尝试跑了一下,发现定时任务没有反应,检查了一下,发现是需要在springboot启动项application类里面额外加一个注解@EnableScheduling
在这里插入图片描述
然后重启一下,发现,可以正常实现了。

最终效果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201126162139925.png#pic_center
定时任务运行存在的弊端:

1.会有时间差,程序不严谨:
只能定点触发,如果你是想要某些订单从随机的某一刻,然后正好一个小时之后触发任务,那就不能采用这种方法来解决问题,可以使用MQ消息队列 延迟任务(队列),在某一点时间下单,会到延迟时间触发,会更加的严谨。
2.不支持集群:
单机运行是没有问题,使用集群后,会有多个定时任务
解决方案:只使用一台计算机节点,单独用来运行所有定时任务

总结:
对于小型任务操作这个功能还是挺不错的,不过如果对于较大的项目来说,还是比较推荐开发一个轻量级的任务调度平台更加适合操作。
尤其是对于频繁需要开关任务,修改cron时间,或者需要观察运行数据量等操作时,这个功能就完全不够用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值