【问题标题】:Tomcat 7.0.23 & Spring 3.1 & task scheduler multiple invocationsTomcat 7.0.23 & Spring 3.1 & 任务调度器多次调用
【发布时间】:2012-03-02 21:46:51
【问题描述】:

我的 spring.xml 看起来像

<task:scheduler id="feedServiceScheduler"  pool-size="10"/>
<task:scheduled-tasks scheduler="feedServiceScheduler">        


    <task:scheduled ref="feedService" method="testMethod" cron="0 50 11 * * *" />

</task:scheduled-tasks>

我希望在一年中的每一天的 11:50 对对象“feedService”调用方法“testMethod”
出于某种原因,testMethod 被调用了两次,我只是找不到问题的解决方案。

“feedService” bean 没有什么花哨的,只是一个简单的 POJO 和测试方法打印出一条消息。

任何关于我可能做错的事情的帮助都会很棒。

谢谢

【问题讨论】:

  • 您是否加载了该配置两次? (应用上下文与网络上下文)?
  • 我只在 web.xml 中声明 spring servlet,并且我有一个 log4jlistener 和 org.springframework.security.web.session.HttpSessionEventPublisher

标签: spring task scheduled-tasks


【解决方案1】:

同样的问题。看起来,tomcat 创建了多个 servlet 实例,因此调度的过程被调度多次。

这是一个小日志,您可以在其中看到在不同类上启动的运行:

[2012-03-22 11:03:00,001] [ClickCheatReportGenerator] DEBUG ClickCheatersender called (com.innofeed.mindenkupon.schedules.ClickCheatReportGenerator@5238d01c)

[2012-03-22 11:03:00,004] [ClickCheatReportGenerator] DEBUG ClickCheatersender called (com.innofeed.mindenkupon.schedules.ClickCheatReportGenerator@fe70870)

[2012-03-22 11:03:00,004] [ClickCheatReportGenerator] DEBUG ClickCheatersender called (com.innofeed.mindenkupon.schedules.ClickCheatReportGenerator@8daf938)

您应该限制 tomcat 只运行 1 个 servlet 实例,但这可能会导致性能问题。

更新: 最后使用 cron 调度调用控制器处理的 url 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2014-12-13
    • 2013-11-27
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多