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 :

Modifier batch pour MultiResourceItemReader [Batch]


Sujet :

Spring Java

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Points : 56
    Points
    56
    Par défaut Modifier batch pour MultiResourceItemReader
    Bonjour,

    j'ai un batch qui prenait pour arguments d'entrée, le fichier à traiter et une date de traitement.

    Le reader est de ce type :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        <bean id="adherentsItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
            <property name="resource" value="#{jobParameters['inputResource']}"/>
            <property name="lineMapper" ref="adherentsLineMapper"/>
        </bean>
     
        <bean id="adherentsLineMapper" class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer" ref="adherentsLineTokenizer"/>
            <property name="fieldSetMapper" ref="adherentsFieldSetMapper"/>
        </bean>
     
        <bean id="adherentsLineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
            <property name="delimiter" value="|"/>
            <property name="names" value="xxx,xx,xxx,xxx,xxx"/>
        </bean>

    Mais, il y a eu un changement. L'un des fichiers en entrée peut contenir jusqu'à 45 000 000 de lignes !!
    Une des pistes à suivre c'est de couper ce fichier en 45 fichiers de 1 000 000 de lignes (mais si vous avez une solution pour lire un fichier de 45 000 000 de lignes, je suis preneur). Je dois donc changer mon reader afin de lire plusieurs fichiers .dat en entrée. Voici ma modification :
    Code XML : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
    						http://www.springframework.org/schema/beans/spring-beans.xsd">
     
        <bean id="adherentsItemReader" class="org.springframework.batch.item.file.MultiResourceItemReader">
            <property name="resources" value="classpath:dat/ExamResult*.dat" />
            <property name="delegate" ref="flatFileItemReader" />
        </bean>
     
        <bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
            <property name="lineMapper" ref="adherentsLineMapper"/>
        </bean>
     
        <bean id="adherentsLineMapper" class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer" ref="adherentsLineTokenizer"/>
            <property name="fieldSetMapper" ref="adherentsFieldSetMapper"/>
        </bean>
     
        <bean id="adherentsLineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
            <property name="delimiter" value="|"/>
            <property name="names" value="xxx,xx,xxx,xxx,xxx"/>
        </bean>
     
        <!-- Bean s'occupant de mapper les données avec les champs définis par le  adherentLineTokenizer -->
        <bean id="adherentsFieldSetMapper"
              class="fr.cnamts.stau.batch.adherents.step.importadherents.reader.AdherentsFiledSetMapper"/>
     
    </beans>

    Mais avec cette configuration, le batch plante dès que je mets deux fichiers dans le répertoire d'entrée. Pourquoi ?
    Autre question comment conserver le paramètre d'entrée des fichiers (args[0]) avec l'utilisation de MultiResourceItemReader ?

    Merci pour vos pistes et retour.

    Cdt,

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 90
    Points : 56
    Points
    56
    Par défaut Avancement..
    J'ai avancé sur mon problème. C'est ok pour les fichiers.
    Par contre j'avais activé la tasklet SimpleAsyncTaskExecutor afin d'accélérer les traitements. Or, lorsque je lance le batch avec les paramètres suivants :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                <tasklet task-executor="taskExecutor" throttle-limit="20">
                    <chunk  reader="adherentsItemReader"
                            processor="adherentsItemProcessor"
                            writer="adherentsItemWriter" commit-interval="1">
                        <listeners>
                            <listener ref="importAdherentsListener" />
                            <listener ref="readListener" />
                            <listener ref="writeListener" />
                        </listeners>
                    </chunk>
                </tasklet>
    <bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
    L'intégralité des données des deux fichiers n'est pas inséré (24 au total). C'est aléatoire, soit j'en ai 13 ou 7 ou 18... Si j'enlève ce paramétrage, j'ai bien les 24 lignes insérées.
    Pourquoi ?

    Merci pour votre retour.
    Cdt,

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

Discussions similaires

  1. [Batch] script batch pour modifier un fichier pdf
    Par yabo84 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 05/07/2013, 12h22
  2. Réponses: 24
    Dernier message: 07/12/2005, 10h37
  3. [Executable]creation d'un batch pour une application
    Par tarik75 dans le forum Général Java
    Réponses: 4
    Dernier message: 03/08/2005, 15h33
  4. Batch pour copier des fichier
    Par borgfabr dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/03/2004, 07h55
  5. batch pour faire une sauvegarde
    Par bibiodp dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 13/08/2003, 13h09

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