java - Spring Cloud Data Flow 处理数据源错误
问题描述
我实现了一个 SpringBatch 作业并尝试在 Spring Cloud Data Flow 上运行它。
当属性设置正确时,作业运行顺利。
但是当数据源属性不正确时,作业将失败,但没有 EXIT STATUS。我猜这是因为作业启动器尚未启动。
我应该如何正确处理这项工作并将 FAILED 状态返回给 SCDF 以便流程继续?
我正在使用自定义 Bean 中的 jobLauncher 运行作业
@Value("${jobName}")
String jobName;
@Bean
public JobExecution run(JobLauncher jobLauncher) {
JobExecution jobExecution = null;
Job job;
try {
JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis()).toJobParameters();
job = BeanFactoryAnnotationUtils.qualifiedBeanOfType(ctx.getAutowireCapableBeanFactory(), Job.class, jobName);
jobExecution = jobLauncher.run(job, jobParameters);
log.info("Exit Status : " + jobExecution.getStatus());
} catch (Exception e) {
e.printStackTrace();
}
return jobExecution;
}
它甚至没有被执行,因为 JPA 数据源在它有机会之前就失败了。
如何正确处理?
解决方案
您分享的代码不正确。您正在创建一个名为run
type的 bean JobExecution
。这意味着当 Spring 配置应用程序上下文时将执行批处理作业。这不是开始批处理作业的正确时间。bean 定义方法应该包含 bean 定义,例如作业定义,但不执行它。
数据库配置应该独立于作业本身。如果您有一个DataSource
由于属性不正确而无法创建的 bean 类型,那么 Spring 应用程序上下文将在该点失败,甚至在加载/运行作业之前。
推荐阅读
- javascript - 在 mocha 中出现“超过 2000 毫秒的超时”错误
- php - php从服务器下载文件不起作用
- sql-server - 批量插入返回错误,“文件无法打开”
- c# - 在 ITextSharp 的下一行自动创建表格
- xml - 如何在包含 < > 而不是 '<' 和 '>' 的 xml 上编写 xslt
- linux - 在 CentOS 上使用 Realtek ALC886 声卡将两个音频输入作为单独的线路
- javascript - Firebase firestore 云函数显示错误:无效使用类型“未定义”作为 Firestore 参数
- android - Activity onStop() 方法调用了两次
- php - 无法通过 ajax 请求从控制器获取数据
- javascript - 在特定类 JQuery 之后添加行