【发布时间】:2016-08-21 12:04:50
【问题描述】:
我正在尝试通过退出状态提示调用者是否成功。
SpringApplication app = new SpringApplication(Foo.class);
app.setWebEnvironment(false);
ConfigurableApplicationContext ctx= app.run(args);
SimpleJobLauncher jobLauncher = ctx.getBean(SimpleJobLauncher.class);
Job job = ctx.getBean("Foo", Job.class);
JobParameters jobParameters = new JobParametersBuilder().toJobParameters();
try {
//test
JobExecution jobExec = jobLauncher.run(job, jobParameters);
if(ExitStatus.FAILED.equals(jobExec.getExitStatus())){
System.exit(1);
}catch(JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException
| JobParametersInvalidException e) {
logger.error("Exception in Foo"+e,e);
System.exit(-1);
}
但是程序没有将值返回给调用者。我正在从 Unix 脚本调用程序,并且 Unix 进程一直在运行。
【问题讨论】:
-
jobLauncher.run(job, jobParameters);立即返回给调用者,因此作业仍在运行,您需要等待完成执行
-
是的,我编码的方式是等待工作完成。但这里的问题是 System.exit(1);没有将控制器返回给调用者。该进程在 Unix 中继续运行。
-
你调试了吗?条件不满足(exitStatus=FAILED),因此 System.exit(-1) 将不起作用,您至少需要一个 else 分支来对其他状态条件作出反应
-
如果出现异常,我将退出。我正在 catch 块中编写退出语句。
-
似乎进程没有抛出异常并且没有失败,这意味着作业正在运行..您需要查看记录器,读取器/处理器/写入器是否正在运行...或者您可以自定义阅读器/处理器/编写器进行调试。
标签: java spring spring-batch