【发布时间】:2018-06-19 14:46:11
【问题描述】:
我有一个包含多个作业的 jar,我想每次只执行一个作业并检索自定义退出代码。
例如,我有一个基本工作 (retrieveErrorsJob) 配置,其中一个步骤将读取输入 XML 文件并将数据写入特定数据库表中。
应用类
@SpringBootApplication
@EnableBatchProcessing
@Import(CoreCommonsAppComponent.class)
public class Application {
private static final Logger logger = LoggerFactory.getLogger(Application.class);
private ConfigurationConstants constants;
@Autowired
public Application(ConfigurationConstants constants) {
this.constants = constants;
}
@EventListener(ApplicationStartedEvent.class)
public void idApplication()
{
logger.info("================================================");
logger.info(constants.APPLICATION_NAME() + "-v." + constants.APPLICATION_VERSION() + " started on " + constants.REMOTE_HOST());
logger.info("------------------------------------------------");
}
public static void main(String... args) throws Exception{
ApplicationContext context = SpringApplication.run(Application.class, args);
logger.info("================================================");
SpringApplication.exit(context);
}
}
我可以从命令行中选择一项工作:
java -jar my-jar.jar --spring.batch.job.names=retrieveErrorsJob --input.xml.file=myfile.xml
Spring Batch 启动正确的作业。
问题是我需要 jar 来返回自定义进程退出整数,如 ExitCode.FAILED == 4 等。但我总是有一个零(如果 ExitCode = SUCCESS 或 FAILED)。
根据文档,我需要实现ExitCodeMapper 接口。
代码(未完成)
public class CustomExitCodeMapper implements ExitCodeMapper {
private static final int NORMAL_END_EXECUTION = 1;
private static final int NORMAL_END_WARNING = 2;
private static final int ABNORMAL_END_WARNING = 3;
private static final int ABNORMAL_END_ERROR = 4;
@Override
public int intValue(String exitCode) {
System.out.println("EXIT CODE = " + exitCode);
switch (exitCode)
{
case "FAILED":
return ABNORMAL_END_WARNING;
default:
return NORMAL_END_EXECUTION;
}
}
}
我找不到使用此自定义实现的方法。我可以将自定义实现设置为CommandLineJobRunner,但是如何使用这个类?
【问题讨论】:
标签: java spring spring-boot jvm exit-code