我有一个使用"task:scheduler"和"task:scheduled-tasks"元素的应用程序(后者包含"task:scheduled"元素).这一切都很好.
我正在尝试编写一些内省"应用程序配置"的代码,以获得一些重要信息的简短摘要,例如安排的任务以及他们的日程安排.
我已经有一个有一堆"@Autowired"实例变量的类,所以我可以遍历所有这些.很容易添加"List"来获取所有TaskScheduler对象.我只有两个,我在每个任务中都有一组不同的计划任务.
我在那些TaskScheduler对象中看不到的东西(它们实际上是ThreadPoolTaskScheduler对象)看起来像是一个计划任务列表,所以我猜测计划任务列表会记录在其他地方.
我可以使用哪些对象来内省计划任务集以及它们所在的线程池?
Tob*_*s M 14
此功能将在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;
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是XML中定义的ScheduledMethodRunnable:
<task:scheduled method="run" cron="0 0 12 * * ?" ref="MyObject" />
Run Code Online (Sandbox Code Playgroud)
您可以访问基础目标对象:
ScheduledMethodRunnable scheduledMethodRunnable = (ScheduledMethodRunnable) task.getRunnable();
TargetClass target = (TargetClass) scheduledMethodRunnable.getTarget();
Run Code Online (Sandbox Code Playgroud)
每个 Spring XML 元素都有一个对应的BeanDefinitionReader
. 对于<task:scheduled-tasks>
,那就是ScheduledTasksBeanDefinitionParser
。
这使用 a为类型为 的 beanBeanDefinitionBuilder
创建 a 。您的计划任务将存储在该 bean 中。BeanDefinition
ContextLifecycleScheduledTaskRegistrar
这些任务将按照默认值或您提供的值执行TaskScheduler
。
我已经给了您类名称,因此如果您需要更细粒度的细节,您可以自己查看源代码。
归档时间: |
|
查看次数: |
6826 次 |
最近记录: |