0
votes

Désactiver les transactions dans mon travail de lot de printemps

J'ai besoin d'insérer un enregistrement dans ma base de données afin que un autre système puisse lire cet enregistrement. Après cela, je vais écrire (avec mon articleWriter) la réponse que je reçois de ce système dans un fichier CSV.

Mon problème est que le système ne peut pas lire l'enregistrement car le lot de printemps est transactionnel. Comment puis-je désactiver cette propriété?


0 commentaires

3 Réponses :


2
votes

Vous ne souhaitez pas désactiver l'application de la transaction, qui peut vous ouvrir jusqu'à un problème d'intégrité de données sérieux. Même un problème d'erreur de 1% peut facilement causer la cause des dix milliers, voire des dizaines de millions d'enregistrements incomplets ou mauvais. Surtout si l'une des bases de données que vous interagissez, ou des systèmes de fichiers que vous écrivez pour devenir indisponible. Ce qui aura lieu au fil du temps. Cela briserait également les fonctions de réessayage d'emploi.

Une meilleure option serait de casser le processus en plusieurs étapes, ou des tâches afin que les limites des transactions correspondent à votre processus. Donc, l'un d'eux écrit à cette autre base de données, puis la prochaine étape ou travail fait la lecture et l'écriture dans le fichier.


0 commentaires

0
votes

Le lot de printemps est un cadre hautement venu. Vous pouvez diviser l'étape ou faire votre travail à l'intérieur de requiert_new transaction. Ou choisissez un cadre alternatif moins restrictif.


0 commentaires

1
votes

Désactiver la transaction par lots de ressort:

  1. Utilisateur .TransActionAttribute (attributs ()) Méthode de AbstracttaskleStepBuilder avec un paramètre par défautTransactionArbute. li>
  2. Construire l'objetTransActionTtribuer par défaut avec la propagation des transactions. Li> ol>

    Exemple: P>

    @Bean
    public Step springBatchStep() {
        return this.stepBuilderFactory.get("springBatchStep")
            ...
            .reader()
            .processor()    
            .writer()
            .transactionAttribute(attributesForTransaction())
            ...
            .build();
    }
        
    private DefaultTransactionAttribute attributesForTransaction() {
         DefaultTransactionAttribute attribute = new DefaultTransactionAttribute();
         attribute.setPropagationBehavior(Propagation.NOT_SUPPORTED.value());
        attribute.setIsolationLevel(Isolation.DEFAULT.value());
        return attribute;
    }
    


0 commentaires