springboot 定时任务

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}")

posted on 2019-03-11 14:48  朱春旺  阅读(154)  评论(0编辑  收藏  举报