【发布时间】:2016-06-30 13:50:22
【问题描述】:
最近,我尝试将带有@Value 注解的预定义值添加到 Bean:
@Component
public class TaskletConfig {
@Bean(name = "FilenameExecutionTasklet")
@JobScope
public Tasklet FilenameExecutionTasklet() {
return new Tasklet() {
@Value("#{jobParameters['inputFilename']}")
private String inputFilename;
@Value("${platformImport.jobParameter.inputFile}")
private String inputFile;
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put(inputFile , inputFilename);
return RepeatStatus.FINISHED;
}
};
}
}
以 NullPointerException 告终。如果我在 Tasklet 中(几乎)做同样的事情,它会起作用:
@JobScope
@Component
public class FilenameExecutionTasklet implements Tasklet {
@Value("${platformImport.jobParameter.inputFile}")
private String inputFile;
@Value("#{jobParameters['inputFilename']}")
private String inputFilename;
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put(inputFile, inputFilename);
return RepeatStatus.FINISHED;
}
}
谁能告诉我为什么?我希望两者都能正常工作。
@Value("${platformImport.jobParameter.inputFile}") 的值在 application.yml 中。
NPE 在chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put(inputFile , inputFilename); 和inputFile 中抛出。
【问题讨论】:
-
第一个例子中你在哪一行有 NPE?
-
对不起,忘了告诉:见编辑。
标签: java spring spring-batch spring-annotations