Spring定时任务——注解@Scheduled实现定时任务

本文转载https://blog.csdn.net/abcdefg2343/article/details/78721573

一张图来说明(任务执行长度超过周期的情况):

这里写图片描述

虽然定时任务可以嵌入到web应用程序和WAR文件中,但下面演示一种更简单的方法创建了一个独立的应用程序。您将所有的内容打包在一个单一的、可执行的JAR文件中,用一个传统Java main()方法驱动。这也就是springboot的启动类。

package com.xgn.cms.SchedulerService;

import com.xgn.cms.common.ClientResult;
import com.xgn.cms.service.Impl.CouponServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * ***GOOD LUCK****
 *
 * @Author : Wukn
 * @Date : 2018/7/30
 * 定时任务
 */
@Component
public class SchedulerTaskCoupon {

    Logger logger = LoggerFactory.getLogger(CouponServiceImpl.class  );

    @Autowired
    private CouponServiceImpl couponService;


    /**
     * 每天凌晨2点开始执行该任务
     */
    @Scheduled(cron="0 0 2 * * ?")
     void process(){
        logger.info("{begin}定时任务开始----------------"+ new Date(  ) );
        ClientResult clientResult = couponService.deleteCouponStatus();
        logger.info( "任务删除结果--------"+clientResult.getResultCode()+clientResult.getResultDesc()+"" );
    }






}

fixedRate

fixedRate表示从调用开始每次延迟多少毫秒继续调用 
用法@Scheduled(fixedRate=5000),5000的单位是毫秒,也就是间隔时间是5秒。

fixedDelay

fixedDelay表示从调用开始延时多少毫秒继续调用下一个周期 
用法@Scheduled(fixedDelay=5000),5000的单位是毫秒,也就是间隔时间是5秒。

initialDelay

fixedDelay表示在第一次执行fixedRate()或fixedDelay()任务之前延迟的毫秒数。 
用法@Scheduled(fixedDelay=5000, initialDelay=10000),单位是毫秒,表示第一次执行fixedDelay()任务之前先延迟10秒。

@Scheduled(cron=”0 0 * * * *”)

cron表达式相比于前几个是比较复杂的。 
该模式是6个(或者7个)单独的空间分隔字段的列表:表示秒、分钟、小时、日、月、星期、(年)。

秒(0~59) 
分钟(0~59) 
小时(0~23) 
天(月)(0~31,但是你需要考虑你月的天数) 
月(0~11) 
星期(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 
年份(1970-2099)(可选)

取值可以是*,?,8-10,8/10,*/10,MON-FRI等类似语法,有什么区别呢?

扫描二维码关注公众号,回复: 3214677 查看本文章

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于”月份中的日期”和”星期中的日期”这两个元素互斥的,必须要对其中一个设置?。现在明白了吧!

比如一下几个例子

"0 0 * * * *" = 每天每时整点
"*/10 * * * * *" = 每十秒(10:20:00, 10:20:10, 10:20:20 ...)触发
"0 0 8-10 * * *" = 每天早上8:00、9:00 和 10:00 触发
"0 0 6,19 * * *" = 每天6:00 和 19:00 触发
"0 0/30 8-10 * * *" = 每天8:00, 8:30, 9:00, 9:30, 10:00 和 10:30 触发
"0 0 9-17 * * MON-FRI" = 朝九晚五(周一至周五9:00-17:00的整点)触发
"0 0 0 25 12 ?" = 圣诞节(每年的12月25日00:00)触发
"0 15 10 L * ?" = 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" = 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2017-2027" = 2017年至2027年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" = 每月的第三个星期五上午10:15触发 
字段 允许值 允许的特殊字符
0-59 , - * /
0-59 , - * /
小时 0-23 , - * /
1-31 , - * ? / L W C
1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /

猜你喜欢

转载自blog.csdn.net/weixin_41404773/article/details/82625477