Я пытаюсь отправить параметры своему читателю.
public JpaPagingItemReader<Person> reader(@Value("#{jobParameters['PersonId']}")
String id){
JpaPagingItemReader<Person> reader = new JpaPagingItemReader<Person>();
reader.setEntityManagerFactory(emf);
reader.setQueryString("SELECT p from "+Person.class.getName()+" p where Id = "+id);
reader.setPageSize(10);
return reader;
}
Это, в свою очередь, потребовало бы, чтобы параметр происходил из методов шага и задания.
@Bean
public Step step(String id){
return stepBuilder.get("step").<Person,Person>chunk(100).reader(reader(id))
.processor(processor())
.writer(writer()).build();
}
@Bean
public Job personJob(String id){
return jobBuilder.get("personJob").incrementer(new RunIdIncrementer()).flow(step(id)).end().build();
}
Мой основной метод реализует CommandLineRunner
, а метод run переопределяется следующим образом -
@Override
public void run(String... args) throws Exception {
JobParameters parameters = new JobParametersBuilder()
.addString("PersonId", "1")
.toJobParameters();
jobLauncher.run(job, parameters);
}
Приведенный выше метод не примет jobParameters
, поскольку jobLauncher.run(job,parameters)
ожидает, что job
не имеет аргументов, но не принимает jobLauncher.run(job(id),parameters)
.
Ошибка, полученная как -
Parameter 0 of method personJob in com.example.JobConfig required a bean of type 'java.lang.String' that could not be found.
Есть ли способ получить id
в моем ридере?