Bonjour à tous ,

j'ai actuellement un batch possédant 2 jobs
Le soucis est lorsque j'appelle soit le job n°1, soit le job n°2, en ligne de commande avec --spring.batch.job.names=job1Name
toutes mes classes implémentant Itemreader sont exécutées à l'initialisation (celles utilisées pour le job n°1 et celle du job n°2)

si je mets des logs j'obtiens ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
start reader 1
start reader 2
start reader 3
start reader 4
avec ce code simplifié :

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
 
@Configuration
public class Job1Class
{
  ...
 
   @Bean
   public @NonNull Job job1(){
      return jobBuilder.get("job1Name")
      .start(step1())
      .next(step2())
      .build();
   }
 
   @Bean
   public @NonNull Step step1()
   {
     return stepBuilder.get("step1")
     .<MyClass, MyClass>chunk(1024)
     .reader(reader1())
     .processor(processor1())
     .writer(writer1())
     .build();
   }
 
   @Bean
   public @NonNull Step step2()
   {
     return stepBuilder.get("step2")
     .<MyClass, MyClass>chunk(1024)
     .reader(reader2())
     .processor(processor2())
     .writer(writer2())
     .build();
   }
 
   @Bean
   public @NonNull ItemReader<MyClass> reader1()
   {
      log.debug("start reader 1");
    //code
   }
 
 
   @Bean
   public @NonNull ItemReader<MyClass> reader2()
   {
      log.debug("start reader 2");
    //code
   }
 
   ...
}
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
 
@Configuration
public class Job2Class
{
   ...
 
   @Bean
   public @NonNull Job job2(){
      return jobBuilder.get("job2Name")
      .start(step3())
      .next(step4())
      .build();
   }
 
   @Bean
   public @NonNull Step step3()
   {
     return stepBuilder.get("step3")
     .<MyClass, MyClass>chunk(1024)
     .reader(reader3())
     .processor(processor3())
     .writer(writer3())
     .build();
   }
 
   @Bean
   public @NonNull Step step4()
   {
     return stepBuilder.get("step4")
     .<MyClass, MyClass>chunk(1024)
     .reader(reader4())
     .processor(processor4())
     .writer(writer4())
     .build();
   }
 
   @Bean
   public @NonNull ItemReader<MyClass> reader3()
   {
      log.debug("start reader 3");
    //code
   }
 
 
   @Bean
   public @NonNull ItemReader<MyClass> reader4()
   {
      log.debug("start reader 4");
    //code
   }
 
  ...
}

Que faut-il faire pour qu'il n'y ai que reader1 et reader 2 qui s'initialise quand je lance le job N°1
et donc que reader 3 et reader 4 pour le job N°2 ?


Merci d'avance de votre aide