Java 在Spring批处理中使用stepExecution
我试图使用stepExecution在Spring批处理中保留数据。但是,当我尝试在代码执行中使用它时,我遇到了一些问题:Java 在Spring批处理中使用stepExecution,java,spring,Java,Spring,我试图使用stepExecution在Spring批处理中保留数据。但是,当我尝试在代码执行中使用它时,我遇到了一些问题: ExecutionContext stepContext = this.stepExecution.getExecutionContext(); 当我对此感到厌倦时,stepExecution未被识别。我导入了org.springframework.batch.core.StepExecution,还尝试了: ExecutionContext context = Step
ExecutionContext stepContext = this.stepExecution.getExecutionContext();
当我对此感到厌倦时,stepExecution未被识别。我导入了org.springframework.batch.core.StepExecution,还尝试了:
ExecutionContext context = StepExecution.getJobExecution().getExecutionContext();
这里识别出StepExecution,但我得到一个“不能对非静态方法进行静态引用”错误。是我的项目设置不正确;我做错了什么
import TextFileReader;
import OracleService;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.batch.core.StepExecution;
public class myTask implements Tasklet {
private List<String> sourceQueries;
private List<String> targetQueries;
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
ExecutionContext context = StepExecution.getJobExecution().getExecutionContext();
ExecutionContext stepContext = this.stepExecution.getExecutionContext();
stepContext.put("theListKey", sourceQueries);
return RepeatStatus.FINISHED;
}
public List<String> getSourceQueries() {
return sourceQueries;
}
public void setSourceQueries(List<String> sourceQueries) {
this.sourceQueries = sourceQueries;
}
public List<String> getTargetQueries() {
return targetQueries;
}
public void setTargetQueries(List<String> targetQueries) {
this.targetQueries = targetQueries;
}
导入TextFileReader;
导入OracleService;
导入java.util.Date;
导入java.util.List;
导入org.apache.commons.lang.StringUtils;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入org.springframework.batch.core.StepContribution;
导入org.springframework.batch.core.scope.context.ChunkContext;
导入org.springframework.batch.core.step.tasklet.tasklet;
导入org.springframework.batch.item.ExecutionContext;
导入org.springframework.batch.repeat.RepeatStatus;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.batch.core.StepExecution;
公共类myTask实现了Tasklet{
私有列表源查询;
私有列表目标查询;
@凌驾
public RepeatStatus execute(StepContribution贡献,ChunkContext ChunkContext)引发异常{
ExecutionContext=StepExecution.getJobExecution().getExecutionContext();
ExecutionContext stepContext=this.stepExecution.getExecutionContext();
put(“theListKey”,sourceQueries);
返回RepeatStatus.FINISHED;
}
公共列表getSourceQueries(){
返回源查询;
}
public void setsourcequerys(列出sourcequerys){
this.sourcequerys=sourcequerys;
}
公共列表getTargetQueries(){
返回targetQueries;
}
public void setTargetQueries(列出targetQueries){
this.targetQueries=targetQueries;
}
}您可以使用注释从步骤作用域bean获取步骤执行:
@BeforeStep
public void setStepExecution(StepExecution stepExecution) {
this.stepExcecution = stepExecution;
}
面向区块的tasklet可以直接从ChunkContext访问StepExecution:
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
StepExecution stepExecution = chunkContext.getStepContext().getStepExecution();
...
}
上面说,无法解决此问题。也许我没有正确地创建一个步骤范围的bean或者其他什么?你能把你的类的完整代码添加到问题描述中吗?好的,我添加了它。我是否需要通过execute方法传递stepExecution?您可以通过调用chunkContext.getStepContext().getStepExecution().getExecutionContext()从chunkContext获取ExcecutionContext