java - 启动 spring 批处理作业时将对象作为参数传递

标签 java spring spring-batch

我的服务正在启动 spring batch 作业。我希望能够将一些对象传递给作业,每次这个对象参数都会不同。我需要在我的 tasklet 中使用这个对象。 我正在通过 JobLauncher 开始这项工作。据我搜索,我发现 JobParameters 在这种情况下不会帮助我。 我还发现很多答案都是使用 JobExecutionContext 或其他任何东西。但是我想在作业开始之前注入(inject)参数对象。 可能吗?

启 Action 业的服务

@Service
public class MyServiceImpl implements MyService {
    @Autowired
    private JobLauncher jobLauncher;
    @Autowired
    private Job myJob;

    @Override
    public MyResponse startJob(InputParameter inputObject) {
        try {
            //Here I want to pass somehow inputObject ot JobExecution
            jobLauncher.run(myJob, new JobParameters());
        } catch (Exception e) {
            return new MyResponse("FAILED")
        }
        return new MyResponse("OK");
    }
}

我的任务

@Component
@Scope("step")
public class MyTasklet implements Tasklet{

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        InputParameter inputObject = chunkContext.getStepContext().getJobExecutionContext().get("inputObject");
        //... the main logic
        return RepeatStatus.FINISHED;
    }
}

最佳答案

使用下面的类发送 CustomObject。

public static class CustomJobParameter<T extends Serializable> extends JobParameter {
        private T customParam;
        public CustomJobParameter(T customParam){
            super("");
            this.customParam = customParam;
        }
        public T getValue(){
            return customParam;
        }
    }

===========================

用法:

发送参数:

JobParameters paramJobParameters = new JobParametersBuilder().addParameter("customparam", new CustomJobParameter(myClassReference)).toJobParameters();

获取参数:

MyClass myclass = (MyClass)jobExecution.getJobParameters().getParameters().get("customparam").getValue();

关于java - 启动 spring 批处理作业时将对象作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680189/

相关文章:

java - StaxEventItemReader 中的 ClassCastException

java - Spring 批处理 : Specifying chunk size for processing List of Lists

java - 猜猜密码OOXML文件的应用?

java - 无法 Autowiring MongoOperations bean

java - 正则表达式分割遵循 ABNF 形式的字符串

java - 如何将 HttpServletResponse 响应获取到 Spring Boot 的 REST Controller 中?

spring - 如何使用 Spring Data JPA 和 Spring Security 实现 AuditorAware?

java - Spring Batch自定义数据库模式初始化

java - 启动 Java 桌面应用程序并摆脱 Commander

java - 独立 Java 应用程序是否有 "best"或最流行的数据库?