Lire un enregistrement/élément et d'écrire de multiples dossiers/articles à l'aide de spring batch
J'ai fait quelques recherches mais je ne trouve pas d'exemple/exemple.
J'ai une exigence où geo coordonnées à partir d'une table (entrée) sont lus, traitées à générer des POI associés à coordonner. Alors, un geo coordonner résulte en un ou plusieurs points d'intérêt qui doit être insérée dans une autre table (de sortie).
Je suis actuellement en utilisant un JdbcCursorItemReader et JdbcBatchItemWriter de lire un article/dossier et écrire un article/d'enregistrement. Il y a aussi un ItemProcessor qui génère les POI pour donner géo coordonner.
Ne personnalisée JdbcBatchItemWriter m'aider à réaliser cela?
Des idées? TIA.
OriginalL'auteur user977505 | 2011-10-25
Vous devez vous connecter pour publier un commentaire.
si vous voulez juste pour diffuser les articles de différents auteurs (lire en double sortie), vous pouvez utiliser le CompositeItemWriter
mais je ne suis pas sûr si votre processeur va produire différents types d'élément ou si vous souhaitez diffuser le contenu d'un complexe de type d'élément à plusieurs écrivains, pour ces cas, vous pouvez utiliser une version légèrement révisée pour une multiline à l'enregistrement de l'écrivain question
si vous utilisez FlatFileItemWriter, n'oubliez pas de registre des délégués ItemStreams (donc, spring batch va ouvrir/fermer pour vous)
cela a fonctionné pour moi. j'ai utilisé un processeur qui était de retourner une Liste d'articles et d'un écrivain comme suggéré ci-dessus. cependant, j'ai utilisé une plaine jdbc modèle w/ batch de mise à jour pour insérer les éléments dans la db. l'important était de " Liste<? extends Object>'. je n'étais pas familier avec cette notation, et qu'il essayait de lire les éléments de la liste. merci encore pour l'aide.
OriginalL'auteur Michael Pralow
Ce que vous êtes vraiment à la recherche est appelé un Splitter modèle:
Ici est de savoir comment il est défini dans Spring Integration:
Un Splitter est un type de Message d'Extrémité dont la responsabilité est d'accepter un Message à partir de son canal d'entrée, de diviser le Message en plusieurs Messages, puis envoyer à chacun de ceux de son canal de sortie. Ceci est généralement utilisé pour diviser un "composite" de la charge utile d'un objet dans un groupe de Messages contenant le sous-divisé charges.
Configuration est extrêmement simple:
Ou vous pouvez utiliser les annotations:
Bien sûr, vous pouvez écrire votre propre
JdbcBatchItemWriter
si elle se sent de plus simple. Cependant Printemps Intégration déjà fait pour vous.Vous pouvez utiliser Le printemps de l'Intégration JDBC Soutien =>
jdbc:inbound-channel-adapter
/jdbc:outbound-channel-adapter
ci-splitter pour atteindre ce que vous voulez et.. la simplicité.vous pouvez certainement faire de réexécuter vs redémarrer ( c'est une discussion philosophique, depuis réexécuter est plus propre :). Mais dans le cas où vous souhaitez utiliser à partir de l'intérieur de Spring Batch ( mince module enfichable ), vous pouvez. Bien que pour @user977505 situation, Spring Integration seul avec éventuellement un peu de SB composants ( ou pas ) fera l'amende juste.
merci pour votre réponse. je vais donner un coup de feu et de mettre à jour le fil.
quelqu'un a fait cela? ou ont des liens vers le code qui le fait? J'ai regardé à travers certains ressorts de l'intégration de la documentation, mais ne pouvais pas trouver beaucoup plus a mentionné que c'était possible
OriginalL'auteur tolitius
Je l'ai fait en étendant la classe Writer (dans mon cas HibernateItemWriter). Je vois une réponse explique comment utiliser un "diviseur". Si quelqu'un a un exemple de la façon qui pourrait fonctionner dans un environnement à l'aide de la collection printemps-amorçage-starter-mère, j'aimerais le voir. Pour ce que je suis en train de faire (créer une Liste à partir d'un seul enregistrement), il serait tellement plus facile si le Printemps a fourni une méthode d'écriture qui s'occupait d'une Liste de Listes.
Voici comment j'ai prolongé l'Écrivain à gérer plusieurs écritures pour chaque ligne de lecture/traitement: Printemps-Lots Multi-ligne Point d'enregistrement de l'Écrivain avec un nombre variable de lignes par enregistrement
OriginalL'auteur MattC