当前位置 博文首页 > 文章内容

    springboot中使用定时器

    作者: 栏目:未分类 时间:2020-08-10 18:00:43

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    springboot使用注解注册定时器

    @Configuration
    @EnableScheduling
    public class WeatherDataTask implements SchedulingConfigurer {
    
        @Autowired
        CommonBiz commonBiz;
        @Autowired
        WeatherSiteBiz weatherSiteBiz;
    
    
        private Logger logger = LoggerFactory.getLogger(DataSynBizImpl.class);
    
        @Override
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            taskRegistrar.addTriggerTask(new TriggerTask(new Runnable() {
    
                @Override
                public void run() {
                    //具体调度的任务
                    pullWeatherTipsTask();
    
    
                }
            }, new Trigger() {
                @Override
                public Date nextExecutionTime(TriggerContext triggerContext) {
                    // 定义定时器的Cron间隔
                    String cron = “30 0 0 1 1 ?”;
                    //调用执行器
                    return new CronTrigger(cron).nextExecutionTime(triggerContext);
                }
            }));
    }
    

    Cron表达式的规则

    org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运行时间,只需要设置其cronExpression属性。

    一个cronExpression表达式有至少6个(也可能是7个)由空格分隔的时间元素。从左至右,这些#


    元素的定义如下:

    1.秒(0–59)

    2.分钟(0–59)

    3.小时(0–23)

    4.月份中的日期(1–31)

    5.月份(1–12或JAN–DEC)

    6.星期中的日期(1–7或SUN–SAT)

    7.年份(1970–2099)

    0 0 10,14,16 * * ? 每天上午10点,下午2点和下午4点

    0 0,15,30,45 * 1-10 * ? 每月前10天每隔15分钟

    30 0 0 1 1 ? 2012 在2012年1月1日午夜过30秒时

    0 0 8-5 ? * MON-FRI 每个工作日的工作时间

    各个时间可用值如下:

    秒 0-59 , – * /
    分 0-59 , – * /
    小时 0-23 , – * /
    日 1-31 , – * ? / L W C
    月 1-12 or JAN-DEC , – * /
    周几 1-7 or SUN-SAT , – * ? / L C #
    年 (可选字段) empty, 1970-2099 , – * /
    

    可用值详细分析如下:

    ”——字符可以用于所有字段,在“分”字段中设为””表示”每一分钟”的含义。

    “?”——字符可以用在“日”和“周几”字段. 它用来指定 ‘不明确的值’. 这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。

    “-”——字符被用来指定一个值的范围,比如在“小时”字段中设为”10-12″表示”10点到12点”。

    “,”——字符指定数个值。比如在“周几”字段中设为”MON,WED,FRI”表示”the days Monday, Wednesday, and Friday”。

    “/”——字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为”0/15″表示”第0, 15, 30, 和 45秒”。而 “5/15″则表示”第5, 20, 35, 和 50″. 在’/'前加”*”字符相当于指定从0秒开始. 每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23, 对于“日”字段来说为0到31, 而对于“月”字段来说为1到12。”/”字段仅仅只是帮助你在允许的数值范围内从开始”第n”的值。

    “L”——字符可用在“日”和“周几”这两个字段。它是”last”的缩写, 但是在这两个字段中有不同的含义。例如,“日”字段中的”L”表示”一个月中的最后一天” —— 对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中, 它简单的表示”7″ or “SAT”,但是如果在“周几”字段中使用时跟在某个数字之后, 它表示”该月最后一个星期×” —— 比如”6L”表示”该月最后一个周五”。当使用’L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。

    “W”——可用于“日”字段。用来指定历给定日期最近的工作日(周一到周五) 。比如你将“日”字段设为”15W”,意为: “离该月15号最近的工作日”。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日, 触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为”1W”, 而一号又是周六, 触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。’W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。

    “L”和“W”可以组合用于“日”字段表示为’LW’,意为”该月最后一个工作日”。

    “#”—— 字符可用于“周几”字段。该字符表示“该月第几个周×”,比如”6#3″表示该月第三个周五( 6表示周五而”#3″该月第三个)。再比如: “2#1″ = 表示该月第一个周一而 “4#5″ = 该月第五个周三。注意如果你指定”#5″该月没有第五个“周×”,该月是不会触发的。

    “C”—— 字符可用于“日”和“周几”字段,它是”calendar”的缩写。 它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历, 那它等同于包含全部日历。“日”字段值为”5C”表示”日历中的第一天或者5号以后”,“周几”字段值为”1C”则表示”日历中的第一天或者周日以后”。

    对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。