gpt4 book ai didi

spring - Spring 怎么样 objects represented at runtime?

转载 作者:IT老高 更新时间:2023-10-28 13:56:46 33 4
gpt4 key购买 nike

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

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

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

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

我可以使用哪些对象来内省(introspection)计划任务集,以及它们位于哪个线程池中?

最佳答案

此功能将在 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 - Spring 怎么样 <task :scheduled> objects represented at runtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21791853/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com