Я пытаюсь внедрить репозиторий в весенний пакетный ридер. Но я получаю «NullPonterException» в одном случае, и он вводит другим способом.
Пожалуйста, посмотрите один раз, почему это происходит так.
Случай: 1 (если в считывателе происходит инъекция)
public class ABCJobLauncher {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Reader reader;
public JobExecution startJobBatchProcessing(KeyRotationParameters keyRotationParameters) {
JobExecution jobExecution = null;
reader.setKeyRotationParameters(keyRotationParameters);
try {
Step step1 = stepBuilderFactory.get("step1").<BatchParameters, BatchParameters>chunk(1).reader(reader)
.processor(processor).writer(writer).build();
Job jobDetails = getJobdetails(keyRotationParameters.getTenantId(), step1);
JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis())
.toJobParameters();
jobExecution = jobLauncher.run(jobDetails, jobParameters);
} catch (Exception e) {
e.printStackTrace();
}
return jobExecution;
}
}
и соответствующий класс «Reader» равен
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.NonTransientResourceException;
import org.springframework.batch.item.ParseException;
import org.springframework.batch.item.UnexpectedInputException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Reader implements ItemReader<BatchParameters> {
@Autowired
private IRepository repopsitory;
private KeyParameters keyParameters;
public KeyParameters getKeyParameters() {
return keyParameters;
}
public void setKeyParameters(KeyParameters keyParameters) {
this.keyParameters = keyParameters;
}
@Override
public BatchParameters read()
throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
VEntry vEntry = repopsitory.findById(id);
**********(batchParameters)
*********
return batchParameters;
}
}
CASE-2 **** (Там, где в читателе не происходит инъекция)
Предположим, если я создаю новый экземпляр для читателя вместо автоматического подключения в "ABCJobLauncher". Затем внедрение бинав читателе не происходит.
Соответствующий код
@Component
public class ABCJobLauncher {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
private JobLauncher jobLauncher;
public JobExecution startJobBatchProcessing(KeyRotationParameters keyRotationParameters) {
JobExecution jobExecution = null;
Reader reader = new Reader();
reader.setKeyRotationParameters(keyRotationParameters);
Processor processor = new Processor();
Writer writer = new Writer();
try {
Step step1 = stepBuilderFactory.get("step1").<BatchParameters, BatchParameters>chunk(1).reader(reader)
.processor(processor).writer(writer).build();
Job jobDetails = jobBuilderFactory.get(JobName).incrementer(new RunIdIncrementer()).flow(step1).end().build();
JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis())
.toJobParameters();
jobExecution = jobLauncher.run(jobDetails, jobParameters);
} catch (Exception e) {
e.printStackTrace();
}
return jobExecution;
}