基于springboot修改定时任务的参数

        基于springboot的定时任务的使用,比较简单,这里简单说一下,第一步是在启动类里面开启@EnableScheduling定时任务注解;第二步是定义一个bean,在bean里面的方法上使用定时任务的注解,比如:

@Scheduled(fixedDelay = 5000),@Scheduled(fixedRate = 5000) ,@Scheduled(initialDelay = 1000, fixedRate = 5000) ,@Scheduled(cron = "0 0/1 * * * ?") 这些注解,放置到方法上面。

      不过上面的注解定义的定时任务都是静态的,也就是定时任务的时间的静态的固定的,有时候我们需要修改定时任务的时间怎么办了?看下面的例子:

实现SchedulingConfigurer接口:

package com.qwrt.fire.sensor.task;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by jack on 2018/3/22.
 */
@Component
public class MyScheduledTaskTest implements SchedulingConfigurer {
    private static final Logger logger = LoggerFactory.getLogger(MyScheduledTaskTest.class);
    private static int fixedDelayCount = 0;
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    private static final String DEFAULT_CRON = "0/5 * * * * ?";
    private String cron = DEFAULT_CRON;



    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(() -> {
            //定时业务处理
            if (!cron.equals(DEFAULT_CRON)) {
                System.out.println("定时参数修改了: "+fixedDelayCount++);
            }
            // 定时任务的业务逻辑
            logger.info("动态修改定时任务cron参数,当前时间:" + dateFormat.format(new Date()));
        }, triggerContext -> {
            // 定时任务触发,可修改定时任务的执行周期
            CronTrigger trigger = new CronTrigger(cron);
            Date nextExecDate = trigger.nextExecutionTime(triggerContext);
            return nextExecDate;
        });
    }

    public String getCron() {
        return cron;
    }

    public void setCron(String cron) {
        this.cron = cron;
    }
}

编写一个测试的控制器,动态修改定时任务的参数:

package com.qwrt.fire.sensor.task;

import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by jack on 2018/3/22.
 */
@RestController
@RequestMapping("test/modifyScheduledParamTest")
public class ModifyScheduledParamTest {
    @Autowired
    private MyScheduledTaskTest myScheduledTaskTest;
    @RequestMapping(value = "/updateCron")
    public JSONObject updateCron(){

        System.out.println("进行定时参数修改......");
        String cron = "0/10 * * * * ?";
        myScheduledTaskTest.setCron(cron);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("success", "修改定时参数成功");
        return jsonObject;
    }
}

          核心代码就是上面两个类,启动程序,刚开始是每隔5秒打印一次,修改了参数以后,每隔10秒打印一次,实现了动态修改参数的功能。当然你可以定义参数传入controller中,这样你就可以灵活的设置定时任务的参数了。这在实际应用中有很大的帮助,能解决我们实际的一些需求。

         欢迎加群:331227121学习交流




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值