Travail par lots Printemps lu depuis plusieurs sources
Comment puis-je lire des articles à partir de plusieurs bases de données? Je sais déjà qu'il est possible à partir de fichiers.
l'exemple suivant fonctionne pour lire à partir de plusieurs fichiers
...
<job id="readMultiFileJob" xmlns="http://www.springframework.org/schema/batch">
<step id="step1">
<tasklet>
<chunk reader="multiResourceReader" writer="flatFileItemWriter"
commit-interval="1" />
</tasklet>
</step>
</job>
...
<bean id="multiResourceReader"
class=" org.springframework.batch.item.file.MultiResourceItemReader">
<property name="resources" value="file:csv/inputs/domain-*.csv" />
<property name="delegate" ref="flatFileItemReader" />
</bean>
...
trois haricots comme ça.
<bean id="database2" class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="name" value="database2Reader" />
<property name="dataSource" ref="dataSource2" />
<property name="sql" value="select image from object where image like '%/images/%'" />
<property name="rowMapper">
<bean class="sym.batch.ImagesRowMapper2" />
</property>
</bean>
source d'informationauteur xedo
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de prêt-à-utiliser un composant qui effectuent ce que vous demandez; la seule solution est d'écrire une coutume
ItemReader<>
que les délégués àJdbcCursorItemReader
(ou àHibernateCursorItemReader
ou à un médicament génériqueItemReader
mise en œuvre).Vous avez besoin pour préparer toutes les choses nécessaires (source de données, la session, la vraie base de données des lecteurs) et de lier tous les délégués, les lecteurs de votre lecture personnalisée.
EDIT:
Vous avez besoin de simuler une boucle à l'aide de recusion de
ItemReader.read()
et mantain lecteur et les délégués de l'etat à travers l'emploi redémarre.EDIT2: n'oubliez pas de définir la propriété nom; il est NÉCESSAIRE de laisser MyItemReader.read() fonctionne correctement
Je suggère une solution simple qui peut ne pas convenir à tous les cas, mais sera utile dans de nombreuses:
De définir simplement:
Les 2 étapes sont presque identiques, ils font référence à la même processeur et écrivain, mais elles ont des lecteurs. Ils seront appelés successivement.
Si cette configuration fonctionne dépendra du processeur et écrivain (qu'ils continuent de fonctionner correctement lorsqu'il est appelé dans les différentes étapes). Dans mon cas, c'était suffisant pour définir
appendAllowed=true
à l'écrivain, à ce que les deux étapes peuvent écrire dans le même fichier.Je suggère une façon délicate. Si nous supposons que l'un est votre source de données mysql de la table de base et chaque ligne de cette table correspond autre source de données mysql table en ligne(comme une jointure de tables qui sont dans les différentes sources de données), vous pouvez le faire dans votre travail par lots itemreader. Ex de cette façon;
Printemps De La Source De Données De Configuration;
Votre batch-job.xml
Votre RowMapper ressemble;