2

我的雇主刚刚要求我在他们正在运行的 Java EE WebSphere 应用程序中运行一个定时批处理。它应该在每天晚上 11:30 上一节课。

我对 Java EE 和 WebSphere 服务器(或开发环境中的 tomcat)不是很熟悉,我一直在研究,但我发现的只是关于 java timer 类,而不是如何设置或调用它.

似乎也需要编辑 web.xml 文件。

任何帮助将不胜感激!

4

7 回答 7

5

您应该查看来自 OpenSymphony的开源Quartz 库。非常易于使用,非常适合这种事情。

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

此外,Spring 框架中还有一个非常棒的 Quartz 抽象。

于 2008-09-16T23:10:13.657 回答
2

在 WebSphere 中,您可以使用调度程序服务来触发 Java 类中方法的执行。调度程序提供了一个用于调度作业执行的日历(类似于 cron),或者您可以开发自己的日历。

这是 WAS 6.1 文档中描述调度程序的页面的链接:

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp

于 2008-11-24T05:55:18.853 回答
1

EJB 3.1 将改进计时器服务,以及应用程序生命周期挂钩,无需使用 servlet 来启动任务而无需用户交互。

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

J2EE 1.4 (EJB 2.1) 中的计时器服务

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

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

HTH,
马丁

于 2008-09-18T20:31:48.810 回答
0

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

<servlet servlet-name='hello' servlet-class='test.HelloWorld'>
<load-on-startup/>
</servlet>

这样做,然后在 servlet 的 init 方法中,您可以设置 Timer / TimerTask 来执行您需要执行的任何操作。TimerTasks 类似于线程,只是您可以安排它们何时运行。

于 2008-09-16T23:12:14.620 回答
0

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

并且是一个非常好的库,无需太多工作,您也可以定义简单的工作流程。

于 2008-09-17T02:22:44.693 回答
0

WebSphere 中不支持调度。

如果您使用的是 unix,则可以使用 crontab 来安排对 websphere 应用程序页面的请求。我想在 Windows 上也可以安排对页面的请求。在我的 crontab 中,我安排了每天 8:45 对网页的请求

45 8 * * * 获取http://www.domain.com/myBatch?securitykey=verysecret

现在每天早上都会调用 myBatch servlet,我可以在那里做当时需要做的任何事情。为了避免其他人调用此页面并启动批处理,我添加了 securitykey 参数。

于 2008-09-18T20:16:59.050 回答