从Spring3.1开始,计划任务在Spring中实现变得异常的简单。首先通过配置类注解@EnableScheduling来开启对计划任务的支持,然后再要执行的计划任务的方法上注释@Scheduled,声明这是一个计划任务。
Spring通过@Scheduled支持多种类型的计划任务,包含cron、fixDelay、fixRate等。
写个栗子来看看:
1)定时任务执行类:
1 package com.wj.test; 2 3 import org.springframework.scheduling.annotation.Scheduled; 4 import org.springframework.stereotype.Service; 5 6 import java.text.SimpleDateFormat; 7 import java.util.Date; 8 9 /** 10 * Created by wj on 2017/9/6. 11 */ 12 @Service 13 public class ScheduledTaskService { 14 private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 15 16 //每个2s执行一次任务 17 @Scheduled(fixedRate = 2000) 18 public void run(){ 19 System.out.println(dateFormat.format(new Date()) + " | " + "每隔2s执行一次任务"); 20 } 21 22 // 每天15点29分执行该任务 23 @Scheduled(cron = "0 29 15 ? * *") 24 public void run1() 25 { 26 System.out.println(dateFormat.format(new Date()) + " | " + "每天在指定时间执行任务"); 27 } 28 }
代码解释:
(1)通过@Scheduled声明该方法是计划任务,使用fixedRate属性每隔固定时间执行。
(2)使用cron属性可按照指定时间执行任务;cron是UNIX和Linux系统下的定时任务。
2)配置类:
1 package com.wj.test; 2 3 import org.springframework.context.annotation.ComponentScan; 4 import org.springframework.context.annotation.Configuration; 5 import org.springframework.scheduling.annotation.EnableScheduling; 6 7 /** 8 * Created by wj on 2017/9/6. 9 */ 10 @Configuration 11 @ComponentScan("com.wj.test") 12 @EnableScheduling 13 public class TaskSchedulerConfig { 14 15 }
通过@EnableScheduling注解开启对计划任务的支持。
3)运行:
1 package com.wj.test; 2 3 import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4 5 /** 6 * Created by wj on 2017/9/6. 7 */ 8 public class TestMain { 9 public static void main(String[] args){ 10 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskSchedulerConfig.class); 11 } 12 }
结果如下图所示:
若在spring boot中使用@Scheduled定时任务,那么不需要写配置类,只需要在启动类application类中加入注解@EnableScheduling即可。
wj:每天努力一点点,你总会成功的。