Java 如何同步jBatch执行?

Java 如何同步jBatch执行?,java,jbatch,jberet,Java,Jbatch,Jberet,我正在用jBeret编写一个jBatch程序。 我现在就是这样做的 final JobOperator=BatchRuntime.getJobOperator(); debug(“操作符:{}”,操作符); final long id=operator.start(“some”,null); debug(“id:{}”,id); final JobExecution=operator.getJobExecution(id); debug(“执行:{}”,执行); 问题在于执行似乎是异步运行的,

我正在用jBeret编写一个jBatch程序。 我现在就是这样做的

final JobOperator=BatchRuntime.getJobOperator();
debug(“操作符:{}”,操作符);
final long id=operator.start(“some”,null);
debug(“id:{}”,id);
final JobExecution=operator.getJobExecution(id);
debug(“执行:{}”,执行);
问题在于执行似乎是异步运行的,而主方法只是返回

我能做的最好的事情就是循环,直到退出状态不为null

字符串状态;
而((status=execution.getExitStatus())==null){
//调试(“睡眠”);
睡眠(1000L);
}
调试(“状态:{}”,状态);
还有其他方法吗?

您可以实现该类,或者只是扩展:


在afterJob方法中,您可以使用一些基本的Java同步技术(未来或将来)。

如果您需要
阻塞并等待
,正如您所描述的,除了实现
awaiCompletion()
之外,没有其他选项

您的循环方法可以改进。让我们以
ThreadPoolExecutor
为例。它有以下方法:

/**
*阻塞,直到关闭后所有任务都已完成执行
*请求,或者发生超时,或者当前线程正在运行
*中断,以先发生者为准。
*
*@param timeout等待的最大时间
*@param unit超时参数的时间单位
*@return{@code true}如果此执行器终止并且
*{@code false}如果在终止之前超时已过
*@如果在等待时被中断,则抛出InterruptedException
*/
布尔等待终止(长超时,时间单位)
抛出中断异常;
以下是实施方案:

公共布尔等待终止(长超时,时间单位)
抛出中断异常{
long nanos=单位toNanos(超时);
final ReentrantLock mainLock=this.mainLock;
mainLock.lock();
试一试{
对于(;;){
if(至少运行状态(ctl.get(),终止))
返回true;
如果(纳米=极限){
返回false;
}
线程睡眠(超时/10);
}
}

JBeret有一个内部方法:

org.jberet.runtime.JobExecutionImpl#awaitTermination(long timeout, TimeUnit timeUnit);
为此目的


当使用JBeret运行时,您可以对从启动作业获得的作业执行调用该方法。

是否
jobsecution
具有类似于
waitcompletion
?@AmmSokun No没有。
org.jberet.runtime.JobExecutionImpl#awaitTermination(long timeout, TimeUnit timeUnit);