Bonjour,
J'ai un job qui se compose de deux steps :
- la première lit des fichiers xml et les sauvegarde en bd, elle est scope et tout se passe bien
- la deuxième déplace les fichiers traités dans un autre répertoire
Problème :
La deuxième step ne déplace que les fichiers ayant le même nom que celui existant au lancement de l'appli.
Donc je me trouve avec des fichiers non déplacés après traitement, donc le programme continue à les traiter (c'est un batch programmé toutes les 10 secondes).
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 @Bean public Job importProductJob() { return jobs.get("importProductJob") .incrementer(new RunIdIncrementer()) .start(productLoadStep()) .on("FAILED").end() .from(productLoadStep()).on("*").to(moveFileStep()) .end() .build(); } @Bean public Step productLoadStep() { return stepBuilderFactory.get("productLoadStep") .<Product, Product>chunk(1000) .reader(multiItemReader()) .processor(processor()) .writer(writer()) .build(); } @Bean @StepScope public MultiResourceItemReader<Product> multiItemReader() { ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver(); org.springframework.core.io.Resource[] resources = null; try { resources = patternResolver.getResources(Constantes.PREFIXE + inputResources); } catch (Exception e) { logger.error("error reading files", e); } return new MultiResourceItemReaderBuilder<Product>() .name("multiItemReader").delegate(reader()) .resources("file:c:/input/prod_*.xml") .setStrict(true) .build(); } @Bean public StaxEventItemReader<Product> reader() { Jaxb2Marshaller productMarshaller = new Jaxb2Marshaller(); productMarshaller.setClassesToBeBound(Product.class); return new StaxEventItemReaderBuilder<Product>() .name("reader") .addFragmentRootElements("productRecord") .unmarshaller(productMarshaller) .strict(false) .build(); } @Bean public ItemProcessor<Product, Product> processor() { return new ProductItemProcessor(); } @Bean public ItemWriter<Product> writer() { JpaItemWriter<Product> writer = new JpaItemWriter<Product>(); writer.setEntityManagerFactory(entityManagerFactory().getObject()); return writer; } @Bean public Step moveFileStep() { FileMovingTasklet task = new FileMovingTasklet(); ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver(); org.springframework.core.io.Resource[] resources = null; try { resources = patternResolver .getResources(inputResources); } catch(Exception ex) { ex.printStackTrace(); } task.setResources(resources); task.setTargetResources(targetResources); return stepBuilderFactory.get("moveFileStep") .tasklet(task) .build(); }
Partager