Vor kurzem habe ich versucht, einen vordefinierten Wert mit der @Value Anmerkung zu einem Bean hinzuzufügen:Unterschied zwischen Klasse und Bohnen durch @Value Anmerkung
@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;
}
};
}
}
, die in einem Nullpointer endet. Wenn ich (fast) das gleiche tun in einem Tasklet, funktioniert es:
@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;
}
}
Könnte jemand bitte sagen, meine warum? Ich hätte erwartet, dass beide arbeiten. Der Wert @Value("${platformImport.jobParameter.inputFile}")
ist in der application.yml.
NPE wird in chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put(inputFile , inputFilename);
mit inputFile
geworfen.
Auf welcher Linie Sie haben NPE im ersten Beispiel? –
Sorry, vergessen zu sagen: Siehe bearbeiten. –