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定时任务以及优缺点_第1张图片
试运行问题解决:
这里开始尝试跑了一下,发现定时任务没有反应,检查了一下,发现是需要在springboot启动项application类里面额外加一个注解@EnableScheduling
Springboot定时任务以及优缺点_第2张图片
然后重启一下,发现,可以正常实现了。

最终效果如下:
Springboot定时任务以及优缺点_第3张图片
定时任务运行存在的弊端:

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

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

你可能感兴趣的:(java,java,spring,boot)