我的雇主刚要求我在他们运行的Java EE WebSphere应用程序中运行定时批处理。它应该在每天晚上11:30开始上课。
我不熟悉Java EE或WebSphere服务器(或tomcat,在开发环境中),我一直在挖掘,但我发现的只是关于java计时器类而不是如何设置它或者调用它。
似乎也需要编辑web.xml文件。
任何帮助将不胜感激!
答案 0 :(得分:5)
您应该查看OpenSymphony中的开源Quartz library。非常容易使用,非常适合这种事情。
TimerTasks最适合将来在短时间内运行。但是对于像这样的大型时间框架的重复执行,Quartz擅长。您甚至可以将即将到来的任务列表保存在持久存储中,例如文件或数据库,这样,如果重新启动应用程序,即将到来的定时作业也不会丢失。
此外,在Spring框架中对Quartz有一个很棒的抽象。
答案 1 :(得分:2)
在WebSphere中,您可以使用Scheduler Service来触发java类中方法的执行。 调度程序提供了一个用于安排作业执行的日历(类似于cron),或者您可以开发自己的日历。
以下是WAS 6.1文档中描述调度程序页面的链接:
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp
答案 2 :(得分:1)
EJB 3.1将改进计时器服务,以及应用程序生命周期钩子,无需用户交互就无需使用servlet来启动任务。
这可能会回答问题标题,但对于在websphere上运行的遗留应用程序(超过6个月前编写;))的“真实”问题,我建议使用启动servlet和EJB计时器服务。
Timer Service in J2EE 1.4 (EJB 2.1)
对于EJB 3.0(和尽快提供3.1),有一些很好的注释;)
除非你真的需要,否则我不会介绍另一个library。计时器服务应该足以每天执行任意作业。
HTH,
马丁
答案 3 :(得分:0)
在您的web.xml中,您可以配置要在启动时加载的servlet 语法:
< servlet servlet-name ='hello'
servlet的类= 'test.HelloWorld' >
<负载上的启动/>
< / servlet的>
执行此操作,然后在servlet的init方法中,您可以设置Timer / TimerTask来执行您需要执行的任何操作。 TimerTasks就像Threads,除了你可以安排它们何时运行。
答案 4 :(得分:0)
Quartz是标准JBoss 4.2.x发行版的一部分。
这是一个非常好的图书馆,没有太多工作,你也可以定义简单的工作流程。
答案 5 :(得分:0)
WebSphere中没有对调度的支持。
如果您使用的是unix,则可以使用crontab为websphere应用程序的页面安排请求。我想在Windows上也可以安排对页面的请求。在我的crontab中,我每天8:45在网页上安排一个请求
45 8 * * *获取http://www.domain.com/myBatch?securitykey=verysecret
现在每天早上都会调用myBatch servlet,那时我可以做任何需要做的事情。为了避免其他人调用此页面并启动批处理,我添加了securitykey参数。
答案 6 :(得分:0)