[Batch] [Boot] paramètres de spring boot vers spring batch
Hello tous,
je rencontre un problème en ce moment sur comment fait on pour passer les paramètres rest (spring boot ) vers spring batch 8O.
je m'explique : j'ai un service rest qui a des paramètres et j'aimerais le faire passer à mon job spring batch. voici ce que j''ai fait jusque là :
Service rest
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
@GetMapping("/load/{id}")
public BatchStatus load (@PathVariable String id) throws
JobExecutionException {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("time", System.currentTimeMillis())
.addString("key", id).toJobParameters();
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
return jobExecution.getStatus();
} |
Mon batch config
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| @Configuration
@EnableBatchProcessing
public class BatchConfig {
@Value("${path.to.react.file}")
private Resource resource;
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
UserDao userDao;
@Bean
public Job job() {
return jobBuilderFactory.get("readCSVFilesJob")
.incrementer(new RunIdIncrementer())
.start(step())
.build();
}
@JobScope
@Bean
public Step step() {
return stepBuilderFactory.get("step1").<UserDTO, UserDTO>chunk(100)
.reader(Reader.reader(resource))
.processor(new Processor())
.writer(new Writer(userDao))
.build();
}
} |
Mon Reader
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| public final class Reader {
/**
* Constructor
*/
private Reader() {
}
/**
* Reader for read CSV file
* @param resource
* @return
*/
public static FlatFileItemReader<UserDTO> reader (Resource resource) {
FlatFileItemReader<UserDTO> flatFileItemReader = new FlatFileItemReader<>();
flatFileItemReader.setResource(resource);
flatFileItemReader.setName("CSV-React");
flatFileItemReader.setLinesToSkip(1);
flatFileItemReader.setLineMapper(lineMapper());
return flatFileItemReader;
}
/**
* The line mapper
* @return
*/
private static LineMapper<UserDTO> lineMapper() {
DefaultLineMapper<UserDTO> defaultLineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
lineTokenizer.setDelimiter(";");
lineTokenizer.setStrict(false);
lineTokenizer.setNames("AC Program", "Request Number", "Request Type", "Creation Date", "User ID", "User Name",
"User Company", "Requestor ID", "Requestor Name", "Application", "Criteria", "Last Status", "Last Updated By",
"Last Status Date", "Applicable Workflown Name", "KO");
BeanWrapperFieldSetMapper<UserDTO> fieldSetMapper = new BeanWrapperFieldSetMapper<>();
fieldSetMapper.setTargetType(UserDTO.class);
defaultLineMapper.setLineTokenizer(lineTokenizer);
defaultLineMapper.setFieldSetMapper(fieldSetMapper);
return defaultLineMapper;
} |
ainsi que le writer
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
@Component
@StepScope
public class Writer implements ItemWriter<UserDTO> {
private UserDao userDao;
@Value("#{jobParameters['key']}")
private String key;
public Writer(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void write(List<? extends UserDTO> items) throws Exception {
userDao.writePnoFile(items);
}
} |
Dans mon writer je n'arrive pas à récuperer la valeur de mon paramètre. y a t il quelqu'un pour m'aider svp ?
Merci d'avance
PS : j'ai fait expres d'omettre la partie process.