springboot中实现动态修改定时任务循环时间
在springboot工程中实现定时任务很常见,那么如何动态修改定时任务的循环时间?调用两个接口,修改方式一每20秒执行一次,方式二每30秒执行一次,如下。下面为在springboot工程中动态修改定时任务的循环时间的实现。3、定时任务的执行时间配置文件,task-config.ini。默认,方式一每10秒执行一次,方式二每15秒执行一次,如下。1、新建springboot工程,引入web依赖。感
·
在springboot工程中实现定时任务很常见,那么如何动态修改定时任务的循环时间?
下面为在springboot工程中动态修改定时任务的循环时间的实现。
1、新建springboot工程,引入web依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2、启动类
@EnableScheduling
@SpringBootApplication
public class SpringbootScheduleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootScheduleApplication.class, args);
}
}
3、定时任务的执行时间配置文件,task-config.ini
scheduleTime.cron=0/10 * * * * ?
scheduleTime.timer=15000
4、定时任务类方式一
@Data
@Slf4j
@Component
@PropertySource("classpath:/task-config.ini")
public class ScheduleTask implements SchedulingConfigurer {
@Value("${scheduleTime.cron}")
private String cron;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// 动态使用cron表达式设置循环间隔
taskRegistrar.addTriggerTask(
new Runnable() {
@Override
public void run() {
log.info("first->Current time: {}", LocalDateTime.now());
}
},
new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 使用CronTrigger触发器,可动态修改cron表达式来操作循环规则
CronTrigger cronTrigger = new CronTrigger(cron);
Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);
return nextExecutionTime;
}
});
}
}
5、定时任务类方式二
@Data
@Slf4j
@Component
@PropertySource("classpath:/task-config.ini")
public class ScheduleTask2 implements SchedulingConfigurer {
@Value("${scheduleTime.timer}")
private Long timer;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// 动态使用cron表达式设置循环间隔
taskRegistrar.addTriggerTask(
new Runnable() {
@Override
public void run() {
log.info("second->Current time: {}", LocalDateTime.now());
}
},
new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 使用不同的触发器,为设置循环时间的关键,区别于CronTrigger触发器,该触发器可随意设置循环间隔时间,单位为毫秒
PeriodicTrigger periodicTrigger = new PeriodicTrigger(timer);
Date nextExecutionTime = periodicTrigger.nextExecutionTime(triggerContext);
return nextExecutionTime;
}
});
}
}
6、接口,动态修改循环时间
@Slf4j
@RestController
@RequiredArgsConstructor
public class ScheduleController {
private final ScheduleTask scheduleTask;
private final ScheduleTask2 scheduleTask2;
@GetMapping("/updateCron")
public String updateCron(String cron) {
cron = "0/20 * * * * ?";
log.info("new cron :{}", cron);
scheduleTask.setCron(cron);
return "ok";
}
@GetMapping("/updateTimer")
public String updateTimer(Long timer) {
log.info("new timer :{}", timer);
scheduleTask2.setTimer(timer);
return "ok";
}
}
7、测试
默认,方式一每10秒执行一次,方式二每15秒执行一次,如下
调用两个接口,修改方式一每20秒执行一次,方式二每30秒执行一次,如下
感兴趣的可以亲身尝试一下~~~///(v)\~~~
更多推荐
已为社区贡献9条内容
所有评论(0)