我的服务正在启动 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/