EJB 3中Spring的替代TimerService

时间:2010-08-24 07:16:30

标签: spring glassfish ejb-3.0

我们正在使用EJB TimerService:s来控制需要按需执行或通过cron表达式触发的任务,有些将在每晚运行,例如:统计收集器和一些将每10秒运行一次,例如检查需要处理的新订单我们还必须能够打开和关闭它们。它在大多数情况下工作正常,但有时无法停止进程,解决问题的唯一方法是刷新TimerPool并重新部署应用程序。

我一直在寻找我们问题的另一个解决方案,我们尝试了以下示例的具有更多控制功能的版本: http://www.adam-bien.com/roller/abien/entry/legally_starting_threads_in_ejbs

它工作正常,但我觉得我们非常接近你应该如何使用EJB的边界。

我一直在寻找任务执行和调度: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html

这似乎是一种摆脱EJB的方法:因为我们只将它们用于TimerService以及控制器和实际任务之间的通信。

问题是我需要比静态配置文件更多的控制,也许家庭酿造的SchedulerFactoryBean可以工作,但我真的不知道我应该从哪里开始寻找?

工作类型

流程引擎

  • 将每10秒执行一次并检查是否有新客户并处理他们的订单
  • 应该能够使用肥皂或通过DB中的设置来打开和关闭发动机

StatisticsCollector

  • 默认情况下每晚凌晨3点开始运行
  • 应该能够按需启动才能启动

1 个答案:

答案 0 :(得分:1)

从上面的评论中,我猜你需要一个更复杂的调度程序。你有没有想过使用Quartz Scheduler

它是开源的,可扩展的并且非常强大。调度是通过CRON表达式完成的,它可以满足帖子中指定的需求

与EJB相比,Quarts的缺点是开箱即用,预定作业不是持久的,它创建了自己的线程池(在运行时无法调整大小),并且它的线程算法不公平(即如果一个工作由于饥饿而没有在指定的时间解雇,它就会被废弃)。尽管如此,我在整个Quartz方面也有很好的经历。