从 cron 触发 Java EE 批处理
Posted
技术标签:
【中文标题】从 cron 触发 Java EE 批处理【英文标题】:trigger Java EE batch from cron 【发布时间】:2014-09-07 04:21:20 【问题描述】:JavaEE 7 应用服务器支持实现 JSR 352 的批处理操作(Glassfish 和 Wildfly 支持)。
从 Unix cron 启动批处理操作的好方法是什么?
执行 wget/curl 启动批处理的 rest servlet 通过 JMX 调用应用服务器的 exec java(java 启动缓慢,是否有用于 C 的 JMX?) ??【问题讨论】:
问题是关于从应用程序服务器外部触发批处理作业,而不是关于 JEE 调度服务。许多 IT 运营部门希望通过企业调度系统(如 cron 或 uc4)启动批处理作业。甚至可以尝试从 Jenkins 触发。 【参考方案1】:调度 Java EE 7 批处理作业可以通过以下几种方式完成:
使用支持类似 cron 语法的 @Schedule 注释 使用 ManagedScheduledExecutorService更多详情请访问:
http://blog.arungupta.me/2014/07/schedule-javaee7-batch-jobs-techtip36/
如果您想使用 curl 调用,那么您可以使用 @GET 注释将代码放在 REST 端点中。添加命令以在 crontab 中调用此端点。
【讨论】:
【参考方案2】:可以通过 jboss-cli.sh(异步启动)启动 Jboss EAP 7 批处理作业(符合 Java EE 7 JSR 352)。
来源:Red Hat JBoss Enterprise Application Platform 7.0 配置指南。
Wildfly 应该是类似的。
以下是用于启动 JBOSS EAP7 批处理作业的 bash 脚本示例:
#!/bin/bash
JBOSS_HOME=/path_to_jboss_eap7_directory
DEPLOY=my_deploy_name.war
JOB_NAME=my_batch_name.xml
$JBOSS_HOME/bin/jboss-cli.sh \
--connect \
--command="/deployment=$DEPLOY/\
subsystem=batch-jberet:\
start-job(job-xml-name=$JOB_NAME)"
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案3】:Java EE 7 通过 @Schedule
注释支持 cron 作业。您可以使用一种方法来触发您的批处理工作。这是一个基本示例:
@Singleton
@Startup
public class CronJobs
@Resource
TimerService timerService;
public void setTimer(long intervalDuration)
Timer timer = timerService.createTimer(intervalDuration,
"Created new programmatic timer");
@Schedule(second = "0", minute = "0", hour = "*/1")
public void fireFooBatch()
JobOperator jobOperator = BatchRuntime.getJobOperator();
Properties props = new Properties();
props.setProperty("someProperty", "someValue");
long execID = jobOperator.start("yourJob", props);
更多信息:
Java EE 7 Tutorial. 34.4 Using the Timer Service. Java EE 7 Tutorial. 55 Batch Processing.【讨论】:
谢谢,但这是从应用服务器内部开始的。我正在寻找从应用服务器外部触发批处理启动的最佳方法,从 cron 中触发的 shell 脚本。 如果您不满足于从应用服务器开始,您可能超出了规范的范围并进入了特定于实现的解决方案。您使用的是哪个应用服务器和/或批处理实现? (我知道这是一个很晚的回复,但也许仍有一些价值)。以上是关于从 cron 触发 Java EE 批处理的主要内容,如果未能解决你的问题,请参考以下文章