Spring <task:scheduled>对象在运行时如何表示?

我有一个使用“ task:scheduler”和“ task:scheduled-tasks”元素的应用程序(后者包含“ task:scheduled”元素)。一切都很好。

我正在尝试编写一些对“应用程序配置”进行内省的代码,以简要了解一些重要信息,例如计划了哪些任务以及它们的计划是什么。

我已经有一个包含一堆“ @Autowired”实例变量的类,因此我可以遍历所有这些。添加一个“列表”以获取所有TaskScheduler对象非常容易。我只有两个,而且每个任务都有一组不同的计划任务。

我在那些TaskScheduler对象(它们实际上是ThreadPoolTask​​Scheduler对象)中看不到的东西看起来像是计划任务的列表,因此我猜测计划任务的列表记录在其他地方。

我可以使用哪些对象来检查计划任务集,它们位于哪个线程池中?

回答:

此功能将在Spring 4.2中提供

https://jira.spring.io/browse/SPR-12748(免责声明:我报告了此问题,并为解决该问题提供了代码)。

// Warning there may be more than one ScheduledTaskRegistrar in your

// application context. If this is the case you can autowire a list of

// ScheduledTaskRegistrar instead.

@Autowired

private ScheduledTaskRegistrar scheduledTaskRegistrar;

public List<Task> getScheduledTasks() {

List<Task> result = new ArrayList<Task>();

result.addAll(this.scheduledTaskRegistrar.getTriggerTaskList());

result.addAll(this.scheduledTaskRegistrar.getCronTaskList());

result.addAll(this.scheduledTaskRegistrar.getFixedRateTaskList());

result.addAll(this.scheduledTaskRegistrar.getFixedDelayTaskList());

return result;

}

// You can this inspect the tasks,

// so for example a cron task can be inspected like this:

public List<CronTask> getScheduledCronTasks() {

List<CronTask> cronTaskList = this.scheduledTaskRegistrar.getCronTaskList();

for (CronTask cronTask : cronTaskList) {

System.out.println(cronTask.getExpression);

}

return cronTaskList;

}

如果您使用的是XML中定义的ScheduledMethodRunnable:

<task:scheduled method="run" cron="0 0 12 * * ?" ref="MyObject" />

您可以访问基础目标对象:

 ScheduledMethodRunnable scheduledMethodRunnable = (ScheduledMethodRunnable) task.getRunnable();

TargetClass target = (TargetClass) scheduledMethodRunnable.getTarget();

以上是 Spring &lt;task:scheduled&gt;对象在运行时如何表示? 的全部内容, 来源链接: utcz.com/qa/397781.html

回到顶部