Sring执行器系统状态缺少调度程序数据,以编程添加调度程序
我正在使用Java 11,Spring Boot。我的调度程序运行 @scheduled
注释,它们出现在执行器页面:##/Administion/Systemstatus
自动。但是从现在开始,我必须提供有可能从UI强行安排任务的可能性要根据应用程序的某些cron表达再次安排此任务。这使我写下了自己的调度组件,因为我发现不可能用@schedule注释来完成所有这些内容。但是作为副作用,我没有有关任务及其CRON表达式的数据。以下是代码,我仅包括一个零件,该部分在部署应用程序时将任务添加到调度程序中。我没有添加重新安排操作。您知道如何修复执行器数据吗?
@Component
@Slf4j
public class MyTaskService {
private final TaskScheduler scheduler;
private final List<CustomTask> taskList; //runnable tasks
private final RunningTasksFutureHolder runningTasksFutureHolder;
public MyTaskService(TaskScheduler scheduler,
List<CustomTask> taskList,
RunningTasksFutureHolder runningTasksFutureHolder) {
this.scheduler = scheduler;
this.taskList = taskList;
this.runningTasksFutureHolder = runningTasksFutureHolder;
}
@PostConstruct
public void afterLoad() {
askList.forEach(this::addTaskToScheduler);
}
public void addTaskToScheduler(CustomTask task) {
//here tasks are added to scheduler and they are not visible in actuator
ScheduledFuture<?> scheduledTask = scheduler.schedule(task, new CronTrigger(task.getCronExpression()));
runningTasksFutureHolder.add(task.getTaskType(), scheduledTask);
}
}
@Configuration
@EnableScheduling
public class SchedulingConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//do nothing here
}
@Bean
public TaskScheduler poolScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setThreadNamePrefix("ThreadPoolTaskScheduler");
scheduler.setPoolSize(5);
scheduler.initialize();
return scheduler;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该直接使用
scheduledtaskregistrar
直接调用taskscheduler
。对于CRON任务,相应的方法为addCrontask()
。参考:
You should use
ScheduledTaskRegistrar
rather than callingTaskScheduler
directly. For the cron task the corresponding method isaddCronTask()
.References: