Spring Boot几种定时任务的实现方式
在实际开发中,我们多多少少都会用到一些定时任务的场景,本文来聊一下常用的定时任务。
常用的定时任务实现方案有以下几种:
Timer
:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask
任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。ScheduledExecutorService
:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。Spring Task
:Spring3.0
以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。Quartz
:这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂。- 数据库,建一张表,表里存放 cron 表达式。
- nacos,使用分布式配置实现动态配置 cron 表达式。
- XXL-JOB,分布式定任务
使用Timer
这个目前在项目中用的较少,直接贴demo代码。
具体的介绍可以查看api:
public class TestTimer { public static void main(String[] args) { TimerTask timerTask = new TimerTask() { @Override public void run() { System.out.println("task run:"+ new Date()); } }; Timer timer = new Timer(); //安排指定的任务在指定的时间开始进行重复的固定延迟执行。这里是每3秒执行一次 timer.schedule(timerTask,10,3000); } }登录后复制