我的雇主刚刚要求我在他们正在运行的 Java EE WebSphere 应用程序中运行一个定时批处理。它应该在每天晚上 11:30 上一节课。
我对 Java EE 和 WebSphere 服务器(或开发环境中的 tomcat)不是很熟悉,我一直在研究,但我发现的只是关于 java timer 类,而不是如何设置或调用它.
似乎也需要编辑 web.xml 文件。
任何帮助将不胜感激!
我的雇主刚刚要求我在他们正在运行的 Java EE WebSphere 应用程序中运行一个定时批处理。它应该在每天晚上 11:30 上一节课。
我对 Java EE 和 WebSphere 服务器(或开发环境中的 tomcat)不是很熟悉,我一直在研究,但我发现的只是关于 java timer 类,而不是如何设置或调用它.
似乎也需要编辑 web.xml 文件。
任何帮助将不胜感激!
您应该查看来自 OpenSymphony的开源Quartz 库。非常易于使用,非常适合这种事情。
TimerTasks 最适合在未来短时间内运行某些东西。但是对于像这样在大时间范围内重复执行,Quartz 表现出色。您甚至可以将即将执行的任务列表保存在持久存储中,例如文件或数据库,因此如果您的应用程序重新启动,即将执行的定时作业不会丢失。
此外,Spring 框架中还有一个非常棒的 Quartz 抽象。
在 WebSphere 中,您可以使用调度程序服务来触发 Java 类中方法的执行。调度程序提供了一个用于调度作业执行的日历(类似于 cron),或者您可以开发自己的日历。
这是 WAS 6.1 文档中描述调度程序的页面的链接:
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp
EJB 3.1 将改进计时器服务,以及应用程序生命周期挂钩,无需使用 servlet 来启动任务而无需用户交互。
这可能会回答问题标题,但对于有关在 websphere 上运行的遗留应用程序(写于 6 个多月前;))的“真实”问题,我建议使用启动 servlet 和 EJB 计时器服务。
对于 EJB 3.0(和 3.1 尽快可用),有一些很好的注释;)
除非你真的需要它,否则我不会介绍另一个库。计时器服务应该足以每天执行任意工作。
HTH,
马丁
在您的 web.xml 中,您可以配置一个 servlet 以在启动时加载。
句法:
<servlet servlet-name='hello' servlet-class='test.HelloWorld'>
<load-on-startup/>
</servlet>
这样做,然后在 servlet 的 init 方法中,您可以设置 Timer / TimerTask 来执行您需要执行的任何操作。TimerTasks 类似于线程,只是您可以安排它们何时运行。
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 参数。
WebSphere 中包含对调度的支持。