记录几种Java定时任务玩法
一.Timer
1.需要关注两个类,Timer和TimerTask
TimerTask:任务内容
Timer:里面有调度TimerTask执行的方法
2.适用于比较简单的计时任务(简单任务下或许比Quartz用起来更方便,不用引入额外的包,逻辑也没有那么复杂)
3.两个类均位于java.util包下
4.如果出现错误,程序会直接崩溃,而不会捕获异常进行异常处理
5.代码
package com.shixin.pawcode.resources.timer;
/**
* @Description
* @Author shixin
* @Date 2021/5/12 8:51
*/
public class MyTimer {
private static int count = 0;
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//延迟2s开始执行,执行间隔1s
System.out.println("当前时间 : "+sdf.format(new Date()));
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println(count++ + " : " +sdf.format(new Date()));
}
}, 2000L, 1000L);
}
}
执行结果

除了上面的调度方法外,在Timer里面还重载了好多种方法,可以自行查阅相关文档或者反编译看源码注释学习

二.@Scheduled
这个注解是Spring自带的,直接按照步骤使用即可。
1.在启动类上添加注解@EnableScheduling
2.代码
package com.shixin.pawcode.resources.config;
@Slf4j
@Component
public class SpringAnnotationScheduler {
@Scheduled(cron = "* * * * * ?")
private void test(){
log.info("定时任务测试");
}
}
这样就行了......不懂参数cron的可以看看这篇文章 :cron详解,在文章下半部分的代码部分也有介绍cron,可以继续往下看。另外附上生成器网址:Cron表达式生成
三.Quartz
英 [kwɔːts]
美 [kwɔːrts]
1.Quartz是什么
Quartz是一个完全由java编写的开源作业调度框架。不要让作业调度这个术语吓着你。尽管Quartz框架整合了许多额外功能, 但就其简易形式看,你会发现它易用得简直让人受不了!
————根据我的使用经验,确实是相当的简单,而且逻辑思路也非常的清晰
2.Quartz能做什么
假设你有以下需求,或许可以使用它:
--想要每天凌晨1点统计昨天新增的用户
--想要每隔一小时备份自己数据库的数据
--想要在特定的节日提醒自己做某些事情
--想要代替人工,每半个小时自动处理邮件
--定期清理数据库不需要的数据
在需要做重复功的时候就可以考虑使用任务调度机制了
3.如何使用
(1)需要使用外部jar包,先引入相关包,我用的版本是2.3.2
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
</dependency>
(2)定义一个类,实现Job接口。
需要重写Job接口的execute。