首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让Spring计划的任务与任务执行器线程一起运行

让Spring计划的任务与任务执行器线程一起运行
EN

Stack Overflow用户
提问于 2012-08-01 19:28:09
回答 2查看 8.4K关注 0票数 4

背景:在Websphere 7应用程序中使用Spring3.0.x获取CommonJ、WorkManager和TimerManager。在我部署的应用程序中,我使用它们在特定的时间间隔内执行任意任务。

问题:

我刚刚了解到,在调度程序中设置bean时,如下所示:

代码语言:javascript
复制
<bean id="threadTest" class="test.ThreadTester" />

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

在Websphere中,它将直接在ThreadTester线程池中运行TimerManager类。与WorkManager线程池相比,这个线程池具有更高的优先级(以及更少的线程)。我希望线程与WorkManager一起运行,而不是处于适当的优先级,并使用为线程设置的适当资源。

作为另一种选择,我可以在ThreadTester类中使用Spring注释,而不是像上面那样在调度器中设置bean:

代码语言:javascript
复制
@Scheduled(fixedDelay = 300000)
public void execute() {
    ...
}

问题:

使用@Scheduled注释会使调度的类在TimerManager线程池或WorkManager线程池中运行吗?

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

谢谢你的帮助!

编辑:在这里,我介绍了如何用Websphere 7公共实现来设置调度程序和执行器:

代码语言:javascript
复制
<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" /> 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-23 18:15:32

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

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

代码语言:javascript
复制
for(StackTraceElement element: Thread.currentThread().getStackTrace()) {
    logger.debug(element.toString());
}
票数 2
EN

Stack Overflow用户

发布于 2012-08-06 19:15:43

看一下Spring文档,看起来您必须使用特定的TaskScheduler在TimerManager线程池- TimerManagerTaskScheduler中运行。

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11766170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档