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 .
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
Mon batch config
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Reader
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
ainsi que le writer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Merci d'avance
PS : j'ai fait expres d'omettre la partie process.
Partager