2014-07-16 65 views
0

JavaEE 7 appservers支持实施JSR 352(Glassfish和Wildfly do)的批处理操作。从cron触发Java EE批处理

从Unix cron启动批处理操作的好方法是什么?

  • EXEC的wget /卷曲启动该批次
  • EXEC的java经由JMX调用应用程序服务器(慢的java开始,是否有下的JMX?)
  • 休息的servlet ??
+0

问题是关于从应用程序服务器外部触发批处理作业,而不是关于JEE调度服务。 许多IT运营商希望通过企业调度系统(如cron或uc4)启动批处理作业。 有人甚至可能试图从詹金斯触发。 – weberjn

回答

0

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); 
    } 
} 

更多信息:

+1

谢谢,但这是从应用服务器内部开始的。我正在寻找从应用程序服务器外部触发批处理启动的最佳方法,即从cron中触发的shell脚本。 – weberjn

+0

如果您不满足于从应用程序服务器内部入手,那么您可能超出了规范的范围和实现特定的解决方案。你使用哪个应用程序服务器和/或批处理实现? (我知道这是一个非常晚的答复,但可能还有一些价值)。 –

2

安排一个Java EE 7批处理作业可以在几个方面进行:

  • 我们荷兰国际集团支持类似cron语法
  • 使用ManagedScheduledExecutorService

更多细节在@Schedule注释:

http://blog.arungupta.me/2014/07/schedule-javaee7-batch-jobs-techtip36/

如果你想使用curl调用,然后就可以把代码中的一个REST端点使用@GET注释。添加一个命令来在crontab中调用此端点。