Java EE中有什么工具可用于定时批处理?
我的雇主只是要求我在他们正在运行的Java EE WebSphere应用程序中运行定时批处理过程。应该在每天晚上11:30上一堂课。
我对Java EE或者WebSphere服务器(或者开发环境中的tomcat)不是很熟悉,我一直在研究,但发现的只是Java计时器类,而不是如何设置或者调用它。
似乎也需要编辑web.xml文件。
任何帮助将不胜感激!
解决方案
回答
我们应该查看来自OpenSymphony的开源Quartz库。非常易于使用,非常适合这种事情。
TimerTasks最适合将来在短时间内运行某些内容。但是对于在如此大的时间范围内重复执行,Quartz表现出众。我们甚至可以将即将执行的任务列表保存在文件或者数据库等持久性存储中,因此,即使重新启动应用程序,即将执行的定时作业也不会丢失。
另外,在Spring框架中有一个很棒的Quartz抽象。
回答
在web.xml中,我们可以配置一个servlet在启动时加载。
句法:
<servlet servlet-name ='hello'
servlet-class ='test.HelloWorld'>
<启动时加载/>
</ servlet>
进行此操作,然后在servlet的init方法中,可以设置一个Timer / TimerTask以执行所需的任何操作。 TimerTasks与Threads类似,但我们可以安排它们的运行时间。
回答
Quartz是标准JBoss 4.2.x发行版的一部分。
这是一个非常好的图书馆,无需太多工作,我们就可以定义简单的工作流程。
回答
WebSphere中不支持调度。
如果我们使用的是Unix,则可以使用crontab安排对Websphere应用程序页面的请求。我想在Windows上也可以将请求安排到页面上。在我的crontab中,我每天8:45安排对网页的请求
45 8 * * *获取http://www.domain.com/myBatch?securitykey=verysecret
现在每天早晨,都会调用myBatch servlet,在那里我可以做任何当时需要做的事情。为了避免其他人调用此页面并开始进行批处理,我添加了securitykey参数。
回答
EJB 3.1将具有改进的计时器服务以及应用程序生命周期挂钩,从而无需使用servlet来启动任务而无需用户交互。
这可能会回答问题标题,但是对于在Websphere上运行的有关遗留应用程序(写了六个月前;)的"真正"问题,我建议使用启动servlet和EJB计时器服务。
J2EE 1.4(EJB 2.1)中的计时器服务
对于EJB 3.0(和3.1尽快可用),有一些不错的注释;)
除非我们确实需要,否则我不会介绍其他库。计时器服务应足以执行每天的任意工作。
HTH,
马丁
回答
在WebSphere中,可以使用Scheduler Service触发Java类中方法的执行。
计划程序提供了用于计划作业执行的日历(类似于cron),或者我们可以自行开发。
这是指向WAS 6.1文档中描述调度程序的页面的链接:
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp
回答
WebSphere中包含对调度的支持。
WAS v7.0
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.base.doc/info/aes/ae/welc6tech_sch.html
WAS v6.1
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.base.doc/info/aes/ae/welc6tech_sch.html