ach*_*ers 15 java spring scheduled-tasks
我在Spring的任务调度程序中安排了几个任务:
<task:scheduled-tasks>
<task:scheduled ref="task1" method="run"
cron="0 0 */0 * * *" />
<task:scheduled ref="task2" method="run"
cron="0 0 */30 * * *" />
</task:scheduled-tasks>
<task:scheduler id="scheduler" pool-size="10" />
Run Code Online (Sandbox Code Playgroud)
如何从应用程序上下文中访问计划任务列表并检索元信息(例如下一个执行时间)?
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
ThreadPoolTaskScheduler scheduler = (ThreadPoolTaskScheduler)context.getBean("scheduler");
//... how to continue from here?
Run Code Online (Sandbox Code Playgroud)
小智 5
我刚刚明白了这一点
从这里开始获取安排的内容。
ThreadPoolTaskScheduler xScheduler = (ThreadPoolTaskScheduler)this.taskScheduler;
ScheduledThreadPoolExecutor xService = (ScheduledThreadPoolExecutor)xScheduler.getScheduledExecutor();
BlockingQueue<Runnable> queue = xService.getQueue();
Object[] scheduledJobs = queue.toArray();
Run Code Online (Sandbox Code Playgroud)
如果这个数组在调试器中查看实例以找到您需要的内容。
然后编写这样的反射代码来获取 Spring 和 Java 中隐藏的 API。请参阅“可访问”设置,这是获取这些私人物品的唯一方法。您可能需要使用不同的公共类来获取某些私有字段,查看 api 文档并在 Eclipse 中查看这些类的源代码。
Method delayM = obj.getClass().getDeclaredMethod("getDelay", TimeUnit.class);
delayM.setAccessible(true);
// delayM = obj.getClass().getDeclaredMethod("getDelay", TimeUnit.class);
Long delay = (Long)delayM.invoke(obj, new Object[] { tu } );
Run Code Online (Sandbox Code Playgroud)
触发器和根runnable位于该对象的callable字段中,ReschedulingRunnable的实例不是公共类,询问Spring为什么这样做。您可以通过反射从 DelegatingErrorHandlingRunnable 中获取委托。
| 归档时间: |
|
| 查看次数: |
10304 次 |
| 最近记录: |