Scheduled
SpringBoot配置定时任务可以直接使用自带的Scheduled,这相当于一个轻量级的Quartz,它可以让我们直接使用注解来完成定时任务的配置。
Scheduled调度时间设置说明
使用Scheduled设置任务调度时间有两种方式,一种为直接设置间隔毫秒数,一种为使用Cron表达式,见下面的代码:
//通过fixedRate属性,来设置每隔固定时间执行一次,fixedRate值的单位为毫秒,此例为每5秒执行1次 @Scheduled(fixedRate = 5000)
//通过cron属性,使用Cron表达式来设置执行时间,此例为每10秒执行1次 //在线Cron表达式生成器:http://cron.qqe2.com/ @Scheduled(cron="*/10 * * * * ?")
调度任务(定时任务)实现类
调度任务1
package Scheduler; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.Date; @Service public class SchedulingTask1 { private Integer count=0; private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //通过fixedRate属性,来设置上一次调度开始后再次调度的延时,fixedRate值的单位为毫秒,此例为每5秒执行1次 @Scheduled(fixedRate = 5000) private void process(){ //输出 System.out.println(String.format("第%s次执行任务SchedulingTask1 时间:%s", (++count).toString(), dateFormat.format(new Date()))); } }
调度任务2
package Scheduler; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.Date; @Service public class SchedulingTask2 { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //通过cron属性,使用Cron表达式来设置执行时间,此例为每10秒执行1次 @Scheduled(cron="*/10 * * * * ?") private void process(){ //输出 System.out.println(String.format("SchedulingTask2执行... 时间:%s", dateFormat.format(new Date()))); } }
也可以将SchedulingTask2类中的方法写在SchedulingTask1类中。
调度配置类
package Scheduler; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @Configuration @ComponentScan("Scheduler") @EnableScheduling //通过@EnableScheduling注解开启对计划任务的支持 public class SchedulerConfig { }
启动类
package com.lgt.demo2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import Scheduler.SchedulerConfig; @SpringBootApplication public class Demo2Application { public static void main(String[] args) { SpringApplication.run(Demo2Application.class, args); AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SchedulerConfig.class); } }
输出结果
第1次执行任务SchedulingTask1 时间:2019-04-15 13:41:33 第2次执行任务SchedulingTask1 时间:2019-04-15 13:41:38 SchedulingTask2执行... 时间:2019-04-15 13:41:40 第3次执行任务SchedulingTask1 时间:2019-04-15 13:41:43 第4次执行任务SchedulingTask1 时间:2019-04-15 13:41:48 SchedulingTask2执行... 时间:2019-04-15 13:41:50 第5次执行任务SchedulingTask1 时间:2019-04-15 13:41:53 第6次执行任务SchedulingTask1 时间:2019-04-15 13:41:58 SchedulingTask2执行... 时间:2019-04-15 13:42:00
SchedulingTask1