SpringBoot 多种定时任务实现方式方法附上想详细代码 (四)
1、实现定时任务的实现方式
- Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。
- ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。
- Spring Task:Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。
- Quartz:这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂。
1.1 Timer实现方式
package com.demo.test;
import com.demo.util.DateUtils;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class time {
public static void main(String[] args) {
timer();
}
public static void timer(){
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
//System.out.println("task run:"+ new Date());
System.out.println("执行时间为:"+ DateUtils.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss"));
}
};
Timer timer = new Timer();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。这里是每3秒执行一次
timer.schedule(timerTask,10,3000);
}
}
1.2 ScheduledExecutorService
package com.demo.test;
import com.demo.util.DateUtils;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class time {
public static void main(String[] args) {
timer();
ScheduledExecutorService();
}
public static void timer(){
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
//System.out.println("task run:"+ new Date());
System.out.println("执行时间为:"+ DateUtils.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss"));
}
};
Timer timer = new Timer();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。这里是每3秒执行一次
timer.schedule(timerTask,10,3000);
}
public static void ScheduledExecutorService(){
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
// 参数:1、任务体 2、首次执行的延时时间 3、任务执行间隔 4、间隔时间单位
service.scheduleAtFixedRate(()->System.out.println("执行时间为:"+ DateUtils.dateToString(new Date(),"yyyy-MM-dd HH:mm:ss")), 0, 3, TimeUnit.SECONDS);
}
}
1.3 spring task
需要在项目启动类加上 @EnableScheduling 开启定时任务
package com.demo.task;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class Test_task {
//@Component 注册为spring组件
@Scheduled(cron="0 */1 * * * ?")
public void Test_task(){
System.out.println("定时1分钟执行一次");
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性