- Timer:这是java自带的java.util.Timer类,这个类允许我们调度一个java.util.TimerTask任务。可以让我们的程序按照某一个频度执行,不足之处是不能在指定时间运行。一般用的比较少。
- ScheduledExecutorService:也是jdk自带的类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,任务是并发执行,互不影响。
- Spring Task:是Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz。
- Quartz:这是一个功能比较强大的的调度器,可以让我们的程序在指定时间执行,也可以按照某一个频度执行,只不过配置起来稍微有点复杂。
Timer
public class TaskTimer {
public static void main(String[] args) {
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("任务启动"+ new Date());
}
};
Timer timer = new Timer();
//每10秒执行一次
timer.schedule(timerTask,10,10000);
}
}
对于ScheduledExecutorService和Spring Task不多谈。哪个配置比较麻烦,我们就来尝试哪种,重点来看一下Quartz实现定时任务。
Quartz
第一,我们在pom文件中添加依赖,如果SpringBoot版本是2.0.0以后的,则在spring-boot-starter中已经包含了quart的依赖,则可以直接使用spring-boot-starter-quartz依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
要是1.5.9则要使用以下添加依赖:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
接下来,我们创建任务类TestQuartz,主要继承了QuartzJobBean
public class TestQuartz extends QuartzJobBean {
/**
* 执行定时任务
*
* @param jobExecutionContext
* @throws JobExecutionException
*/
@Override
protected void executeInternal(JobExecutionContext
jobExecutionContext) throws JobExecutionException {
System.out.println("洪生鹏 quartz task " + new Date());
}
}
创建配置类QuartzConfig
@Configuration
public class QuartzConfig {
@Bean
public JobDetail teatQuartzDetail() {
return JobBuilder.newJob(TestQuartz.class).
withIdentity("testQuartz").
storeDurably().build();
}
@Bean
public Trigger testQuartzTrigger() {
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2) //设置时间周期单位秒 每隔两秒实行一次
.repeatForever();
return TriggerBuilder.newTrigger().forJob(teatQuartzDetail())
.withIdentity("testQuartz")
.withSchedule(scheduleBuilder)
.build();
}
}
Run项目,我们可以看到控制台打印出如下信息:
至此关于定时任务,我们就创建完成了。
以上简单地介绍了关于SpringBoot定时任务的处理,更多功能还需摸索。https://mp.weixin.qq.com/s/usnYUMIsp-Rm1FPi06hSQA