[JAVA] Comment résoudre le problème que le bean n'est pas traité correctement lorsqu'il est imbriqué dans Spring Batch

Aperçu

Par exemple, vous pouvez définir une classe contenant FlatFileItemReaderBuilder, ʻItemProcessor, JdbcBatchItemWriterBuilder` pour créer une classe qui représente un Tasklet orienté Chunk.

Cependant, même si cette classe est enregistrée comme «Bean», «JdbcBatchItemWriterBuilder» ne fonctionnera pas normalement avec l'erreur suivante.

Erreur de sortie


org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException:L'instruction SQL a une erreur de syntaxe"INSERT INTO PEOPLE (FIRST_NAME, LAST_NAME) VALUES (:[*]FIRSTNAME, :LASTNAME)";Déclaration attendue"), DEFAULT, NOT, EXISTS, INTERSECTS, UNIQUE"
Syntax error in SQL statement "INSERT INTO PEOPLE (FIRST_NAME, LAST_NAME) VALUES (:[*]FIRSTNAME, :LASTNAME)"; expected "), DEFAULT, NOT, EXISTS, INTERSECTS, UNIQUE"; SQL statement:

Pour une raison quelconque, : firstName n'a pas été converti en?. (Bien sûr, si vous enregistrez JdbcBatchItemWriterBuilder directement en tant que Bean, cela fonctionne bien.)

Cause

Quand tous les beans sont enregistrés, l'enregistrement se termine normalement en appelant ʻafterPropertiesSet () pour les classes qui ont ʻInitializingBean ʻimplements`. Cependant, si vous avez des objets imbriqués qui devraient être des beans, ils ne seront pas appelés et l'enregistrement ne sera pas terminé normalement.

Solution

Implémentez ʻInitializingBeandans la classe parent holding (= classe exposée directement en tant queBean`) et propagez-la à l'objet holding.

@Override
public void afterPropertiesSet() throws Exception {
    Object[] objects = new Object[]{this.reader, this.processor, this.writer};
    for (Object object : objects) {
        if (object instanceof InitializingBean) {
            ((InitializingBean) object).afterPropertiesSet();
        }
    }
}

Recommended Posts

Comment résoudre le problème que le bean n'est pas traité correctement lorsqu'il est imbriqué dans Spring Batch
Comment résoudre le problème lorsque la valeur n'est pas envoyée lorsque le formulaire est désactivé dans les rails et envoyé
Comment résoudre le problème que l'image du site Web ne s'affiche pas après le déploiement sur heroku dans Rails 5
[Rails] Comment résoudre le problème d'écrasement de l'image par défaut lors de l'édition sans télécharger l'image [Active Storage]
Comment définir quand "Le constructeur Empty () n'est pas visible" se produit dans junit
Turbolinks: je veux résoudre le problème que JS ne s'affiche pas correctement à moins d'être rechargé lors de la transition avec link_to
Solution au problème que les ruptures de ligne intra-cellulaires sont amplifiées lorsque EXCEL est généré à l'aide du classeur SXSSF (3.16 ou version antérieure)
Comment résoudre le problème qu'Aptana Studio ne démarre pas
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java
Comment résoudre le problème de non-sortie du journal de connexion lorsque l'application Web est arrêtée
Comment résoudre le problème selon lequel la notification ne peut pas être demandée sur iOS14
Comment contraindre l'action de la destination de transition lorsqu'elle n'est pas connectée
Comment résoudre l'erreur'ActionView :: Template :: Error (L'actif "application.css" n'est pas présent dans le pipeline d'actifs. '"Lors de la précompilation d'actifs Rails
Comment résoudre les problèmes d'expression en Java
Est-il courant de ne pas écrire la balise de fermeture de la balise <P> dans Javadoc?
Lorsque le projet n'est pas affiché dans eclipse
[Swift] Comment décrire simplement le rejet qui n’a pas été enseigné dans le livre d’introduction
Traitement lorsqu'un ID qui n'existe pas dans la base de données est entré dans l'URL
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
ORA-08177 lorsque Spring Batch est exécuté en continu dans Oracle
Comment utiliser le référentiel de jobs en mémoire avec Spring Batch
Comment initialiser par lots des tableaux avec Java que je ne savais pas quand j'étais débutant
Comment régler chrony lorsque le temps change dans CentOS7
Comment obtenir le journal lorsque install4j ne démarre pas
[Rails] Comment enregistrer temporairement l'URL de demande d'un utilisateur qui n'est pas connecté et revenir à cette URL après la connexion
Lancer une exception et attraper lorsqu'il n'y a pas de gestionnaire correspondant au chemin au printemps
À propos du problème selon lequel l'image n'est pas affichée après le déploiement AWS
ProxyFactory est pratique lorsque vous souhaitez tester AOP avec Spring!
Correction d'un problème où l'événement de défilement ne se déclenchait pas dans JQuery
Fonction similaire La partie bloquée pour la rendre asynchrone
Que faire lorsque les modifications du servlet ne sont pas reflétées
[jOOQ] Comment utiliser CASE WHEN dans la clause WHERE / AND / OR
Comment identifier le chemin sur lequel il est facile de se tromper
[RSpec] Lorsque vous souhaitez utiliser la variable d'instance du contrôleur dans le test [attribuer n'est pas recommandé]
Un hachage actif qui peut être traité comme des données même s'il n'est pas dans la base de données
Que faire si l'opération non autorisée s'affiche lors de l'exécution d'une commande dans le terminal
Comment utiliser Lombok au printemps
Comment interagir avec un serveur qui ne plante pas l'application
Que faire lorsque le préfixe c n'est pas lié dans JSP
[Docker] Comment résoudre la fonction d'erreur non implémentée @ io_fread ~ [Super facile]
[Rails] À propos de l'erreur selon laquelle l'image n'est pas affichée dans l'environnement de production
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby, avec récurrence.
[Docker] Comment créer lorsque le code source est monté en liaison sur le conteneur
Comment trouver le nombre total de pages lors de la pagination en Java
Comment obtenir la valeur du paramètre (valeur de la propriété) à partir de la base de données dans Spring Framework
Est-il possible de mettre la bibliothèque (aar) dans la bibliothèque Android (aar) et de l'utiliser?
Comment référencer une colonne lors du remplacement de la méthode de nom de colonne dans ActiveRecord
JSESSIONID n'a pas pu être attribué à l'URL lors de l'utilisation de Spring Security
Le problème selon lequel la page localhost lancée par Docker ne peut pas être confirmée dans le navigateur lorsque le pare-feu ESET fonctionne
Continuation ・ Hash actif qui peut être traité comme des données même s'il n'est pas dans la base de données ~ Affichage