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 :

Spring boot batch : deuxième step n'est pas en scope (@StepScop) et ne fonctionne pas convenablement [Batch]


Sujet :

Spring Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Points : 41
    Points
    41
    Par défaut Spring boot batch : deuxième step n'est pas en scope (@StepScop) et ne fonctionne pas convenablement
    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();
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 61
    Points : 41
    Points
    41
    Par défaut
    J'ai résolu le problème en modifiant mon code et la méthode moveFileStep() ainsi :

    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
    @Bean
    public Step moveFileStep() {
    	return stepBuilderFactory
    		.get("moveFileStep")
    		.tasklet(fileMovingTasklet())
    		.build();
    }
     
    @Bean
    @StepScope
    public Tasklet fileMovingTasklet() {
     
    	// Traitement
     
    	return new Tasklet() {
    			@Override
    			public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
    				return RepeatStatus.FINISHED;
    			}
    	};
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/08/2018, 13h49
  2. Réponses: 4
    Dernier message: 14/01/2011, 10h02
  3. [Spring MVC] onSubmit n'est pas exécuté
    Par napol1fr dans le forum Spring Web
    Réponses: 1
    Dernier message: 30/05/2008, 12h03
  4. [Spring MVC] onSubmit n'est pas éxecuté
    Par jamalmoundir dans le forum Spring Web
    Réponses: 1
    Dernier message: 27/06/2007, 15h19
  5. Réponses: 1
    Dernier message: 17/10/2006, 15h05

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