使用任务执行程序线程运行Spring计划任务

时间:2012-08-01 19:28:10

标签: spring java-ee websphere workmanagers

后台:我在我的Websphere 7应用程序中使用Spring 3.0.x来获取CommonJ WorkManager和TimerManager。我使用它们在我部署的应用程序中以特定间隔执行任意任务。

问题:

我刚刚了解到在调度程序中设置bean时如此:

<bean id="threadTest" class="test.ThreadTester" />

<task:scheduled-tasks scheduler="myTimerExecutor">
    <task:scheduled ref="threadTest" method="execute" fixed-delay="300000" />
</task:scheduled-tasks>

在Websphere中,它将直接在TimerManager线程池中运行ThreadTester类。此线程池具有比WorkManager线程池高得多的优先级(和更少的线程)。我希望线程与WorkManager一起运行,而不是正确的优先级,并使用为线程设置的适当资源。

作为替代方案,我可以在@Scheduled类中使用Spring ThreadTester注释,而不是像上面那样在调度程序中设置bean:

@Scheduled(fixedDelay = 300000)
public void execute() {
    ...
}

问题:

使用@Scheduled注释是否使计划的类在TimerManager线程池或WorkManager线程池中运行?

如果它使用WorkManager运行,那就太棒了!这解决了我的问题。但是,如果它使用TimerManager直接执行该类,那么我想我必须编写一些包装器才能正确调用WorkManager。

感谢您的帮助!

编辑:这里我介绍了如何使用Websphere 7 commonj实现设置调度程序和执行程序:

<bean id="myTaskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor"> 
    <property name="workManagerName" value="wm/default" />
    <property name="resourceRef" value="true"/>
</bean>

<bean id="myTaskScheduler" class="org.springframework.scheduling.commonj.TimerManagerTaskScheduler"> 
    <property name="timerManagerName" value="tm/default" />
    <property name="resourceRef" value="true" />
    <property name="shared" value="false" />
</bean>

<task:annotation-driven executor="myTaskExecutor" scheduler="myTaskScheduler" /> 

2 个答案:

答案 0 :(得分:2)

好吧,我发现确实是,@Scheduled bean在Websphere 7上的TimerManager线程池中运行。

我所要做的只是吐出线程的堆栈跟踪,以查看调用它的层次结构。

for(StackTraceElement element: Thread.currentThread().getStackTrace()) {
    logger.debug(element.toString());
}

答案 1 :(得分:0)

查看Spring文档,看起来您将不得不使用特定的TaskScheduler在TimerManager线程池中运行 - TimerManagerTaskScheduler

<bean name="scheduler" class="org.springframework.scheduling.commonj.TimerManagerTaskScheduler">
...
</bean>

<task:scheduled-tasks scheduler="scheduler">
    <task:scheduled ref="threadTest" method="execute" fixed-delay="300000" />
</task:scheduled-tasks>