1.启动类新增注解 @EnableScheduling
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* @describe: 定时任务启动类 EnableScheduling:发现注解@Scheduled的任务并后台执行。
* @author: zhucw
* @date: 2019/3/11 10:23
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableScheduling
public class TaskApplication {
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
}
}
2.定时任务类
package com.wdlcoud.rps.task.tasks;
import com.wdcloud.rps.utils.AppUtil;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
/**
* @describe: 定时任务
* @author: zhuchunwang
* @date: 2019/3/11 10:24
*/
@Component
public class AppTask {
/**
* 1分钟执行一次
*/
@Scheduled(fixedDelay = 60 * 1000)
public void testOneMinute(){
System.out.println("===="+ AppUtil.getFormatDate() +"===>>>=testOneMinute执行");
}
/**
* 10秒执行一次
*/
@Scheduled(fixedDelay = 10 * 1000)
public void testTenMinute(){
System.out.println("===="+AppUtil.getFormatDate()+"===>>>=testTenSenConds执行");
}
/**
* cron表达式
* 每天14点29执行
*/
@Scheduled(cron = "0 32 14 ? * *")
public void testTask1432() {
System.out.println("===="+AppUtil.getFormatDate()+"===>>>=testTask1432执行");
}
/**
*cron规则:
* 秒(0~59)
* 分钟(0~59)
* 小时(0~23)
* 天(月)(0~31,但是你需要考虑你月的天数)
* 月(0~11)
* 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
* 年份(1970-2099)
*
* 【0 0 10,14,16 * * ?】 每天上午10点,下午2点,4点
* 【0 0/30 9-17 * * ?】 朝九晚五工作时间内每半小时
* 【0 0 12 ? * WED 】表示每个星期三中午12点
* 【0 0 12 * * ?】每天中午12点触发
* 【0 15 10 ? * *】每天上午10:15触发
* 【0 15 10 * * ?】每天上午10:15触发
* 【0 15 10 * * ? *】 每天上午10:15触发
* 【0 15 10 * * ? 2005】2005年的每天上午10:15触发
* 【0 * 14 * * ?】 在每天下午2点到下午2:59期间的每1分钟触发
* 【0 0/5 14 * * ?】 在每天下午2点到下午2:55期间的每5分钟触发
* 【0 0/5 14,18 * * ?】 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
* 【0 0-5 14 * * ?】在每天下午2点到下午2:05期间的每1分钟触发
* 【0 10,44 14 ? 3 WED】每年三月的星期三的下午2:10和2:44触发
* 【0 15 10 ? * MON-FRI】 周一至周五的上午10:15触发
* 【0 15 10 15 * ?】每月15日上午10:15触发
* 【0 15 10 L * ?】每月最后一日的上午10:15触发
* 【0 15 10 ? * 6L】每月的最后一个星期五上午10:15触发
* 【0 15 10 ? * 6L 2002-2005】 2002年至2005年的每月的最后一个星期五上午10:15触发
* 【0 15 10 ? * 6#3】每月的第三个星期五上午10:15触发
*/
}
3.cron 规则
- 秒(0~59)
- 分钟(0~59)
- 小时(0~23)
- 天(月)(0~31,但是你需要考虑你月的天数)
- 月(0~11)
- 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
- 年份(1970-2099)
4.cron 示例
- 【0 0 10,14,16 * * ?】 每天上午10点,下午2点,4点
- 【0 0/30 9-17 * * ?】 朝九晚五工作时间内每半小时
- 【0 0 12 ? * WED 】表示每个星期三中午12点
- 【0 0 12 * * ?】每天中午12点触发
- 【0 15 10 ? * *】每天上午10:15触发
- 【0 15 10 * * ?】每天上午10:15触发
- 【0 15 10 * * ? *】 每天上午10:15触发
- 【0 15 10 * * ? 2005】2005年的每天上午10:15触发
- 【0 * 14 * * ?】 在每天下午2点到下午2:59期间的每1分钟触发
- 【0 0/5 14 * * ?】 在每天下午2点到下午2:55期间的每5分钟触发
- 【0 0/5 14,18 * * ?】 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
- 【0 0-5 14 * * ?】在每天下午2点到下午2:05期间的每1分钟触发
- 【0 10,44 14 ? 3 WED】每年三月的星期三的下午2:10和2:44触发
- 【0 15 10 ? * MON-FRI】 周一至周五的上午10:15触发
- 【0 15 10 15 * ?】每月15日上午10:15触发
- 【0 15 10 L * ?】每月最后一日的上午10:15触发
- 【0 15 10 ? * 6L】每月的最后一个星期五上午10:15触发
- 【0 15 10 ? * 6L 2002-2005】 2002年至2005年的每月的最后一个星期五上午10:15触发
- 【0 15 10 ? * 6#3】每月的第三个星期五上午10:15触发
5.fixedDelay 和 fixedRate的区别
比如都是5*1000 5秒
- fixedDelay 是不管上次任务执行多长时间 下次任务都在5秒后执行
- fixedRate 上次任务如果执行花了3秒 那下次就在2秒后执行,上次任务花了6秒 下次任务在上次任务结束后马上就执行
6.fixedDelay 和 fixedRate 怎么使用配置文件?
使用它们的String类型
@Scheduled(fixedRateString = "${task.fixed.resourceTask}")
7.cron 使用配置文件
@Scheduled(cron = "${task.cron.testCron}")