IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

problème d'exécution itemReader


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2020
    Messages : 2
    Par défaut problème d'exécution itemReader
    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

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Brésil

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2016
    Messages : 2
    Par défaut
    Bonjour,

    Premièrement valide bien que la propriété spring.batch.job.enabled soit égale à false.

    Ensuite, un Bean Spring est par défaut un singleton si aucun scope n'est explicitement défini, il est donc normal que lorsque ton application démarre tous tes Beans soient instanciés. Le fait que tes implémentations de ItemReader soient instanciées ne veut pas dire que leurs méthodes read() soient appelées.

    Pour le cas de Spring Batch, spécifiquement, tu peux forcer un Bean à être crée seulement au runtime lors de l'exécution du job, pour cela, tu peux doit annoter ton Bean avec @JobScope. C'est utile notamment pour récupérer les JobParameters ou lire une variable présente dans un ExecutionContext.

Discussions similaires

  1. Problème pour exécuter une chaîne de caractères
    Par Pongo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h34
  2. Problème d'exécution : 'rtl60.bpl introuvable'
    Par zeddy23 dans le forum EDI
    Réponses: 3
    Dernier message: 27/07/2005, 20h44
  3. Réponses: 5
    Dernier message: 19/04/2005, 08h50
  4. [Tomcat][EasyStruts] Problème d'exécution
    Par mmed dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 29/12/2004, 11h55
  5. Problème à l'exécution avec wxWindows (compilé avec BCC55)
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 14/11/2003, 18h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo