quartz 静态、动态定时任务(springboot)

静态定时任务

package com.lsbj.biz;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @Auther: zs
 * @Date: 2019/1/9 11:34
 * @Description:
 */
@Component
@Configuration
@EnableScheduling
public class ScheduTask {

    /**
     * 凌晨一点统计昨天的
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void statisticTask(){
        System.out.println("静态定时任务:"+System.currentTimeMillis()/1000);
    }
}
EnableScheduling注解:开启定时任务;Configuration注解:配置注解(不用也行);Component注解:实体注解,交由spring容器管理

效果:

五秒一次

动态定时任务

package com.lsbj.biz;

import javafx.scene.Parent;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.regex.Pattern;

/**
 * @Auther: zs
 * @Date: 2019/1/16 16:19
 * @Description:
 */
@Component
@EnableScheduling
public class DynamicScheduTask implements SchedulingConfigurer{

    //默认五秒执行一次
    private static final String DEFAULT_CRON = "0/5 * * * * ?";

    //查询数据库接口,获得最新cron
    @Mapper
    public interface CronMapper {
        @Select("select mender from setting_office where id = '23'")
        String getCron();
    }
    //注入cron接口
    @Autowired
    CronMapper cronMapper;


    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        System.out.println("===========1=============");
        scheduledTaskRegistrar.addTriggerTask(task(),trigger());
    }

    private Runnable task(){
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("动态定时任务:"+System.currentTimeMillis()/1000);
            }
        };
        return runnable;
    }
    private Trigger trigger(){
        return new Trigger() {
            //下一次触发事件
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                System.out.println("===========2=============");
                Date date = null;
                try{
                    //cron表达式异常时,进入catch执行默认cron表达式
                    CronTrigger cronTrigger = new CronTrigger(getCron());
                    date = cronTrigger.nextExecutionTime(triggerContext);
                }catch (Exception e){
                    System.out.println("===========4====cron异常(取默认值)");
                    CronTrigger cronTrigger = new CronTrigger(DEFAULT_CRON);
                    date = cronTrigger.nextExecutionTime(triggerContext);
                }
                return date;
            }
        };
    }

    private String getCron(){
        //可以通过数据库,redis或其他方式获取cron表达式
        //从数据库获取
        String cron = cronMapper.getCron();
        System.out.println("cron:"+cron);
        return cron;
    }
}

异常cron

数据库cron:aaa* * * * ?

结果:

异常时取默认值5秒执行一次;

正常cron时
数据库cron:0/6 * * * * ?(6秒一次,默认五秒)

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值