2008-09-16 30 views
2

我的雇主只是让我在他们运行的Java EE WebSphere应用程序中运行定时批处理。它应该每天晚上11点30分开始上课。Java EE中的定时批处理有哪些工具?

我不是很熟悉Java EE和WebSphere服务器(或者tomcat,在开发环境中),而且我一直在挖掘,但是我发现的所有东西都是关于java定时器类的,但不是如何设置它或调用它。

看起来也需要编辑web.xml文件。

任何帮助将不胜感激!

回答

5

你应该看OpenSymphony的开源Quartz library。非常容易使用和完美的这种事情。

TimerTasks最适合将来在短时间内运行某些东西。但是对于像这样的大规模时间内重复执行,Quartz非常擅长。您甚至可以将即将到来的任务列表保存在持久性存储中,例如文件或数据库,因此即使重新启动应用程序,即将到来的定时作业也不会丢失。

另外,Spring框架中Quartz有一个很好的抽象。

0

在你的web.xml中,你可以配置一个servlet在启动时加载。
语法:

<的servlet的servlet-name = '你好' 的servlet类= 'test.HelloWorld' >
<时加载的启动/ >
</servlet的>

做到这一点,然后在servlet的init方法中,你可以设置一个Timer/TimerTask来完成你需要做的任何事情。 TimerTasks就像Threads,除非你可以安排它们运行的​​时间。

0

Quartz是标准JBoss 4.2.x发行版的一部分。

这是一个非常好的图书馆,没有太多的工作,你也可以定义简单的工作流程。

0

在WebSphere中不支持调度。

如果你在UNIX上,你可以使用crontab来安排一个请求到你的websphere应用程序的页面。我想在Windows上也可以安排一个请求到一个页面。在我的crontab我在8:45

45 8,每天安排一个网页的请求* * *每天早上myBatch的servlet调用GET http://www.domain.com/myBatch?securitykey=verysecret

现在起,我可以做任何需要在做那时。为了避免其他人打电话给这个页面并开始批处理,我添加了securitykey参数。

+0

是啊,你经常把它添加到列出HTTP访问每个日志文件......真的,verysecret ... – 2008-09-18 20:34:42

+0

它运行在我自己的服务器上,我是唯一一个看到日志文件的人。这只是为了确保其他人不会开始我的批处理。我想在这里指出的一点是,你可以使用crontab来调用一个servlet。按照您认为必要的方式保护它。为我完美工作。 – boes 2008-09-24 22:49:59

1

EJB 3.1将改进计时器服务以及应用程序生命周期挂钩,以消除在无用户交互的情况下使用servlet启动任务的需要。

这可能会回答问题标题,但是对于遗留应用程序(写于6个月前以前)编写的“真正”问题;)在websphere上运行时,我建议使用启动servlet和EJB定时器服务。

Timer Service in J2EE 1.4 (EJB 2.1)

对于EJB 3.0(和3.1尽快提供),也有一些很好的注释;)

我不介绍另一个library,除非你真的需要它。计时器服务应该足够每天执行任意工作。

HTH,
马丁