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.)
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.
Implémentez ʻInitializingBeandans la classe parent holding (= classe exposée directement en tant que
Bean`) 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();
}
}
}