首页 > 解决方案 > 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 数据源在它有机会之前就失败了。

如何正确处理?

标签: javaspringspring-batchspring-cloud-dataflow

解决方案


您分享的代码不正确。您正在创建一个名为runtype的 bean JobExecution。这意味着当 Spring 配置应用程序上下文时将执行批处理作业。这不是开始批处理作业的正确时间。bean 定义方法应该包含 bean 定义,例如作业定义,但不执行它。

数据库配置应该独立于作业本身。如果您有一个DataSource由于属性不正确而无法创建的 bean 类型,那么 Spring 应用程序上下文将在该点失败,甚至在加载/运行作业之前。


推荐阅读