Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring批处理中使用stepExecution_Java_Spring - Fatal编程技术网

Java 在Spring批处理中使用stepExecution

Java 在Spring批处理中使用stepExecution,java,spring,Java,Spring,我试图使用stepExecution在Spring批处理中保留数据。但是,当我尝试在代码执行中使用它时,我遇到了一些问题: ExecutionContext stepContext = this.stepExecution.getExecutionContext(); 当我对此感到厌倦时,stepExecution未被识别。我导入了org.springframework.batch.core.StepExecution,还尝试了: ExecutionContext context = Step

我试图使用stepExecution在Spring批处理中保留数据。但是,当我尝试在代码执行中使用它时,我遇到了一些问题:

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