[JAVA] So lösen Sie das Problem, dass die Bean beim Verschachteln in Spring Batch nicht ordnungsgemäß verarbeitet wird

Überblick

Beispielsweise möchten Sie möglicherweise eine Klasse definieren, die "FlatFileItemReaderBuilder", "ItemProcessor" und "JdbcBatchItemWriterBuilder" enthält, um eine Klasse zu erstellen, die ein Chunk-orientiertes Tasklet darstellt.

Selbst wenn diese Klasse als "Bean" registriert ist, funktioniert "JdbcBatchItemWriterBuilder" nicht normal mit dem folgenden Fehler.

Ausgabefehler


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:SQL-Anweisung hat Syntaxfehler"INSERT INTO PEOPLE (FIRST_NAME, LAST_NAME) VALUES (:[*]FIRSTNAME, :LASTNAME)";Erwartete Aussage"), 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:

Aus irgendeinem Grund wurde : firstName nicht in? Konvertiert. (Wenn Sie JdbcBatchItemWriterBuilder direkt als Bean registrieren, funktioniert das natürlich einwandfrei.)

Ursache

Wenn alle Beans registriert sind, wird die Registrierung normalerweise abgeschlossen, indem "afterPropertiesSet ()" für die Klasse aufgerufen wird, die "InitializingBean" implementiert. Wenn Sie jedoch verschachtelte Objekte haben, die Beans sein sollten, werden diese nicht aufgerufen und die Registrierung wird nicht normal abgeschlossen.

Lösung

Implementieren Sie "InitializingBean" in der übergeordneten Holding-Klasse (= direkt als "Bean" exponierte Klasse) und geben Sie sie an das Holding-Objekt weiter.

@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

So lösen Sie das Problem, dass die Bean beim Verschachteln in Spring Batch nicht ordnungsgemäß verarbeitet wird
So lösen Sie das Problem, wenn der Wert nicht gesendet wird, wenn das Formular in Schienen deaktiviert und gesendet wird
So lösen Sie das Problem, dass das Website-Image nach der Bereitstellung auf Heroku in Rails 5 nicht angezeigt wird
[Rails] So lösen Sie das Problem, dass das Standardbild beim Bearbeiten überschrieben wird, ohne das Bild hochzuladen [Active Storage]
Festlegen, wann in junit "Der Konstruktor Empty () ist nicht sichtbar" auftritt
Turbolinks: Ich möchte das Problem lösen, dass JS nicht richtig angezeigt wird, es sei denn, es wird beim Übergang mit link_to neu geladen
Lösung für das Problem, dass zelleninterne Zeilenumbrüche verstärkt werden, wenn EXCEL mit SXSSF Workbook (3.16 oder älter) ausgegeben wird.
So lösen Sie das Problem, dass Aptana Studio nicht gestartet wird
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
So beheben Sie den unbekannten Fehler, der bei der Verwendung von slf4j in Java aufgetreten ist
So beheben Sie das Problem, dass beim Stoppen der Webanwendung kein Protokollierungsprotokoll ausgegeben wird
So lösen Sie das Problem, dass unter iOS14 keine Benachrichtigung angefordert werden kann
So beschränken Sie die Aktion des Übergangsziels, wenn Sie nicht angemeldet sind
So beheben Sie den Fehler 'ActionView :: Template :: Error' (Das Asset "application.css" ist in der Asset-Pipeline nicht vorhanden. '"Beim Vorkompilieren von Rails-Assets
So lösen Sie Ausdrucksprobleme in Java
Ist es Mainstream, das schließende Tag des <P> -Tags nicht in Javadoc zu schreiben?
Wenn das Projekt nicht in Eclipse angezeigt wird
[Swift] Eine einfache Art, Entlassung zu beschreiben, die im Einführungsbuch nicht gelehrt wurde
Verarbeitung, wenn eine ID, die nicht in der Datenbank vorhanden ist, in die URL eingegeben wird
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
ORA-08177, wenn Spring Batch kontinuierlich in Oracle ausgeführt wird
Verwendung des In-Memory-Job-Repositorys mit Spring Batch
Wie man Arrays mit Java stapelweise initialisiert, wusste ich als Anfänger nicht
So stellen Sie die Chronik ein, wenn sich die Zeit in CentOS7 verschiebt
So erhalten Sie das Protokoll, wenn install4j nicht gestartet wird
[Rails] So speichern Sie die Anforderungs-URL eines Benutzers, der nicht angemeldet ist, vorübergehend und kehren nach der Anmeldung zu dieser URL zurück
Wirf eine Ausnahme und fange, wenn es keinen Handler gibt, der dem Pfad im Frühjahr entspricht
Informationen zum Problem, dass das Image nach der AWS-Bereitstellung nicht angezeigt wird
ProxyFactory ist praktisch, wenn Sie AOP mit Spring testen möchten!
Es wurde ein Problem behoben, bei dem das Bildlaufereignis in JQuery nicht ausgelöst wurde
Like-Funktion Der Teil, der feststeckt, um es asynchron zu machen
Was tun, wenn die Änderungen im Servlet nicht berücksichtigt werden?
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
So identifizieren Sie den Pfad, auf dem leicht Fehler gemacht werden können
[RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]
Ein aktiver Hash, der als Daten behandelt werden kann, auch wenn er nicht in der Datenbank enthalten ist
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Wie man Lombok im Frühling benutzt
So interagieren Sie mit einem Server, der die App nicht zum Absturz bringt
Was tun, wenn das Präfix c in JSP nicht gebunden ist?
[Docker] So lösen Sie die nicht implementierte Fehlerfunktion @ io_fread ~ [Super einfach]
[Schienen] Über den Fehler, dass das Bild nicht in der Produktionsumgebung angezeigt wird
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby mit Wiederholung zu lösen.
[Docker] Erstellen, wenn der Quellcode auf dem Container gebunden ist
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
So erhalten Sie den Einstellungswert (Eigenschaftswert) aus der Datenbank in Spring Framework
Ist es möglich, die Bibliothek (aar) in die Android-Bibliothek (aar) zu stellen und zu verwenden?
So verweisen Sie auf eine Spalte, wenn Sie die Spaltennamensmethode in ActiveRecord überschreiben
JSESSIONID konnte bei Verwendung von Spring Security nicht der URL zugewiesen werden
Das Problem, dass die von Docker gestartete localhost-Seite vom Browser nicht bestätigt werden kann, wenn die ESET-Firewall ausgeführt wird
Fortsetzung ・ Aktiver Hash, der als Daten behandelt werden kann, auch wenn er nicht in der Datenbank enthalten ist ~ Anzeige