我们有一个Web应用程序,通过在Jersey/Tomcat/Apache/PostgreSQL上运行的RESTful Web服务接收传入数据。与这个Web服务应用程序分开,我们有一些需要执行的重复和计划任务。例如,以不同的时间间隔清除不同类型的数据,根据不同的时间表从外部系统提取数据,并根据指定的日期和时间生成报告。Quartz Scheduler - 在Tomcat或应用程序jar中运行?
因此,在阅读了Quartz Scheduler之后,我发现它看起来非常合适。我的问题是:我应该设计我的基于Quartz的调度应用程序在Tomcat中运行(通过QuartzInitializerListener),还是将它构建到独立的应用程序中以作为Linux守护进程运行(例如,通过Apache Commons Daemon或Tanuk Java服务包装)。
一方面,使用Tomcat来托管一个不适合接收http调用的应用程序,这种做法违反了直觉。另一方面,我之前没有使用Apache Commons Daemon或Java Service Wrapper,所以也许在Tomcat内部运行是阻力最小的路径。
我应该知道哪种方法有任何重大的好处或危险?我们的核心模块已经处理数据访问,日志记录等,所以我没有看到这些服务是一个很重要的因素。
我们的调度将由数据驱动,所以我们的基于Quartz的调度器将从PostgreSQL读取相关数据。但是,如果我们在Tomcat中运行调度应用程序,是否可以/合理地通过http调用Tomcat向我们的应用程序发送消息?最后,fwiw,因为我们的工作将由我们现有的应用程序数据驱动,所以我认为Quartz JDBCJobStore没有任何需要。
感谢您的意见。是的,我可以用nohup和&启动jar,但我觉得守护进程会更好,因为它可以让应用程序正常执行任何关闭操作(例如,完成正在进行的db写入,将应用程序状态写入db如所须)。我仍然觉得我没有看到任何运行Tomcat内部/外部的好处,例如,,在资源消耗方面,但我会继续挖掘。 – ricb 2014-10-01 17:05:10