1、启动类上添加@EnableScheduling
package com.item; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.scheduling.annotation.EnableScheduling; @MapperScan("com.item.dao") @SpringBootApplication @EnableScheduling public class Action extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Action.class); } public static void main(String[] args) { SpringApplication.run(Action.class,args); } }
2、创建测试包【com.item.task】
2.1fixedRate定时
package com.item.task; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; /** * 任务类 */ @Component public class TaskTest { /** * 每2秒执行1次 */ @Scheduled(fixedRate = 2000) public void fixedRateMethod() throws InterruptedException { System.out.println("task-fixedRate,每2秒执行1此:" + new Date()); Thread.sleep(1000); } }
2.2cron定时
package com.item.task; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.Date; /** * 任务类 */ @Component public class TaskCron { private SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** * 在每分钟的00秒执行 */ @Scheduled(cron = "0 * * * * ?") public void oneMin() throws InterruptedException { System.out.println("cron每分钟执行:" + simpleDateFormat.format(new Date())); } /** * 每5秒执行 */ @Scheduled(cron = "*/5 * * * * ?") public void fiveS() throws InterruptedException { System.out.println("cron每5秒执行:" + simpleDateFormat.format(new Date())); } }
Cron表达式
cronExpression表达式有至少6个由空格分隔的时间元素,从左往右,这些元素的定义如下:
秒,分,时,月份中的日期,月份,星期,年份
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
* 表示所有值;
? 表示未说明的值,即不关心它为何值;
- 表示一个指定的范围;
, 表示附加一个可能值;
/ 符号前表示开始时间,符号后表示每次递增的值;
常用定时:
每隔5秒执行一次任务: "*/5 * * * * ?"
每隔1分钟执行一次任务: "0 */1 * * * ?"
每天23点执行一次任务: "0 0 23 * * ?"
每天凌晨1点执行一次任务: "0 0 1 * * ?"
每月1号凌晨1点执行一次任务: "0 0 1 1 * ?"
每月1号凌晨2点执行一次任务: "0 0 2 1 * ? *"
每月最后一天23点执行一次任务: "0 0 23 L * ?"
每周星期天凌晨1点执行一次任务: "0 0 1 ? * L"
每隔5秒执行一次任务: "*/5 * * * * ?" 每隔1分钟执行一次任务: "0 */1 * * * ?" 每天23点执行一次任务: "0 0 23 * * ?" 每天凌晨1点执行一次任务: "0 0 1 * * ?" 每月1号凌晨1点执行一次任务: "0 0 1 1 * ?" 每月1号凌晨2点执行一次任务: "0 0 2 1 * ? *" 每月最后一天23点执行一次任务: "0 0 23 L * ?" 每周星期天凌晨1点执行一次任务: "0 0 1 ? * L"
效果: