2009-10-11 154 views
2

我有一个Java EE应用程序,它有两个组件:第一个是从互联网上获取一些信息并将其填充到数据库中的服务。其次是一个web界面(部署在tomcat上),用户可以从中浏览该信息。Java EE应用程序中的线程

什么可能是实现第一个组件的最佳方法?它应该作为后台守护进程/服务还是容器内的线程运行?

回答

8

我会亲自把他们分成不同的过程。除了其他任何东西,这意味着你可以重新启动一个,而不用担心另一个。这也意味着你可以很容易地在不同的机器上部署它们,而不需要毫无意义地将Tomcat安装在一个实际上不需要Web界面的服务上。

+0

您是否认为java.util.Timer和java.util.TimerTask类可以用于此目的?谢谢 – craftsman 2009-10-11 09:45:13

+0

我在回答中提到的Spring调度类为java并发对象提供了一个良好的接口,比如Executor,这实际上就是您应该在现代应用程序中使用的接口。 – grkvlt 2009-10-11 10:48:13

7

根据应用程序框架的类型,Spring允许您使用Quartzjava.util.concurrent框架。 Spring有一个TaskExecutor抽象(请参阅Spring documentation),它可以简化很多这种操作,但请检查以确定哪种设计最适合您。然后,Spring或Quartz(由Spring管理)控制线程或执行程序或作业的创建和启动/停止,以及它们的频率/周期和其他调度参数,还管理任何可能需要的作业池。

我在任何Java EE应用程序中都使用它们来处理所有后台任务和批处理作业,而且没有任何问题。由于作业是Spring管理的POJO,因此他们可以访问Spring所需的完整依赖注入框架等等,当然,您可以根据需要更改或缩放,在调度程序框架之间切换,并对应用程序配置XML文件进行简单更改。

+0

+1石英上,我用它在许多j2ee应用程序安排后台进程。 – broschb 2009-10-11 14:45:31