java - Spring Batch在步骤内访问作业参数

标签 java spring spring-batch

我有以下 Spring Batch Job 配置:

@Configuration
@EnableBatchProcessing
public class JobConfig {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job job() {
        return jobBuilderFactory.get("job")
                .flow(stepA()).on("FAILED").to(stepC())
                .from(stepA()).on("*").to(stepB()).next(stepC())
                .end().build();
    }

    @Bean
    public Step stepA() {
        return stepBuilderFactory.get("stepA").tasklet(new RandomFailTasket("stepA")).build();
    }

    @Bean
    public Step stepB() {
        return stepBuilderFactory.get("stepB").tasklet(new PrintTextTasklet("stepB")).build();
    }

    @Bean
    public Step stepC() {
        return stepBuilderFactory.get("stepC").tasklet(new PrintTextTasklet("stepC")).build();
    }

}

我开始使用以下代码:

    try {
                    Map<String,JobParameter> parameters = new HashMap<>();
                    JobParameter ccReportIdParameter = new JobParameter("03061980");
                    parameters.put("ccReportId", ccReportIdParameter);

                    jobLauncher.run(job, new JobParameters(parameters));
                } catch (JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException
                        | JobParametersInvalidException e) {
                    e.printStackTrace();
                }

如何从作业步骤中访问 ccReportId 参数?

最佳答案

Tasklet.execute() 方法接受参数 ChunkContext,Spring Batch 会在其中注入(inject)所有元数据。所以你只需要通过这些元数据结构挖掘作业参数:

chunkContext.getStepContext().getStepExecution()
      .getJobParameters().getString("ccReportId");

或其他选项是以这种方式访问​​作业参数映射:

chunkContext.getStepContext().getJobParameters().get("ccReportId");

但这会给你 Object 并且你需要将它转换为字符串。

关于java - Spring Batch在步骤内访问作业参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32465142/

相关文章:

java - 用于提供静态内容的 Spring servlet?

java - 使用 Spring Batch 逐行插入数据修复列表大小问题

spring-batch - 使项目阅读器返回列表而不是单个对象-Spring 批处理

grails - 如何在 Grails Spring Batch 和 SQL 中使用日期作业参数?

java - Spring Batch 从外部类停止作业执行

java - 如何检测用户是否被切换(Spring Security)

java - 通过正则表达式从行中获取彼此相邻的 3 个字符串

java - s3开始使用Apache Spark返回内容长度错误的结尾,同时在较旧的EC2实例上可以正常工作

java - 如何将结果集连接到字符串变量

java - Spring-cglib 代理类层次结构中的行为