基于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 = "https://www.it610.com/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学习交流
【spring|基于springboot修改定时任务的参数】
推荐阅读
- =======j2ee|spring用注解实现注入的@resource,@autowired,@inject区别
- jar|springboot项目打成jar包和war包,并部署(快速打包部署)
- 数据库|效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...
- java人生|35K 入职华为Java开发那天,我哭了(这 5 个月做的一切都值了)
- Java毕业设计项目实战篇|Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)
- 微服务|微服务系列:服务发现与注册-----Eureka(面试突击!你想了解的Eureka都在这里.持续更新中......)
- java|ApplicationListener和SpringApplicationRunListener的联系
- Spring|SpringSecurity--自定义登录页面、注销登录配置
- 性能|性能工具之 Jmeter 通过 SpringBoot 工程启动
- 代码狂魔|Spring源码分析之IOC容器初始化流程