Spring Batch - Lettori, scrittori e processori
Un Item Reader legge i dati nell'applicazione batch di primavera da una particolare origine, mentre un file Item Writer scrive i dati dall'applicazione Spring Batch in una particolare destinazione.
Un Item processorè una classe che contiene il codice di elaborazione che elabora i dati letti nel batch di primavera. Se l'applicazione legge n record, il codice nel processore verrà eseguito su ogni record.
UN chunk è un elemento figlio di tasklet. Viene utilizzato per eseguire operazioni di lettura, scrittura ed elaborazione. Possiamo configurare lettore, scrittore e processori utilizzando questo elemento, in un passaggio come mostrato di seguito.
<batch:job id = "helloWorldJob">
<batch:step id = "step1">
<batch:tasklet>
<batch:chunk reader = "cvsFileItemReader" writer = "xmlItemWriter"
processor = "itemProcessor" commit-interval = "10">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
Spring Batch fornisce a lettori e scrittori la lettura e la scrittura di dati da vari file system / database come MongoDB, Neo4j, MySQL, XML, flatfile, CSV, ecc.
Per includere un lettore nell'applicazione, è necessario definire un bean per quel lettore, fornire valori a tutte le proprietà richieste all'interno del bean e passare il id di tale bean come valore per l'attributo dell'elemento chunk reader (lo stesso per writer).
ItemReader
È l'entità di una fase (di un processo batch) che legge i dati. Un ItemReader legge un elemento alla volta. Spring Batch fornisce un'interfacciaItemReader. Tutti ireaders implementare questa interfaccia.
Di seguito sono riportate alcune delle classi ItemReader predefinite fornite da Spring Batch per leggere da varie fonti.
Lettore | Scopo |
---|---|
FlatFIleItemReader | Per leggere dati da file flat. |
StaxEventItemReader | Per leggere dati da file XML. |
StoredProcedureItemReader | Per leggere i dati dalle procedure memorizzate di un database. |
JDBCPagingItemReader | Per leggere i dati dal database dei database relazionali. |
MongoItemReader | Per leggere i dati da MongoDB. |
Neo4jItemReader | Per leggere i dati da Neo4jItemReader. |
Dobbiamo configurare il file ItemReaderscreando i fagioli. Di seguito è riportato un esempio diStaxEventItemReader che legge i dati da un file XML.
<bean id = "mysqlItemWriter"
class = "org.springframework.batch.item.xml.StaxEventItemWriter">
<property name = "resource" value = "file:xml/outputs/userss.xml" />
<property name = "marshaller" ref = "reportMarshaller" />
<property name = "rootTagName" value = "Tutorial" />
</bean>
<bean id = "reportMarshaller"
class = "org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name = "classesToBeBound">
<list>
<value>Tutorial</value>
</list>
</property>
</bean>
Come osservato, durante la configurazione, dobbiamo specificare il rispettivo nome della classe del lettore richiesto e dobbiamo fornire valori a tutte le proprietà richieste.
ItemWriter
È l'elemento di stepdi un processo batch che scrive dati. Un ItemWriter scrive un elemento alla volta. Spring Batch fornisce un'interfacciaItemWriter. Tutti gli autori implementano questa interfaccia.
Di seguito sono riportate alcune delle classi ItemWriter predefinite fornite da Spring Batch per leggere da varie fonti.
scrittore | Scopo |
---|---|
FlatFIleItemWriter | Per scrivere dati in file flat. |
StaxEventItemWriter | Per scrivere dati in file XML. |
StoredProcedureItemWriter | Per scrivere dati nelle stored procedure di un database. |
JDBCPagingItemWriter | Per scrivere dati nel database dei database relazionali. |
MongoItemWriter | Per scrivere dati in MongoDB. |
Neo4jItemWriter | Per scrivere dati in Neo4j. |
Allo stesso modo, dobbiamo configurare gli ItemWriters creando i bean. Di seguito è riportato un esempio diJdbcCursorItemReader che scrive i dati su un database MySQL.
<bean id = "dbItemReader"
class = "org.springframework.batch.item.database.JdbcCursorItemReader" scope = "step">
<property name = "dataSource" ref = "dataSource" />
<property name = "sql" value = "select * from tutorialsdata" />
<property name = "rowMapper">
<bean class = "TutorialRowMapper" />
</property>
</bean>
Item Processor
ItemProcessor: Un ItemProcessor viene utilizzato per elaborare i dati. Quando l'articolo fornito non è valido, ritornanull, altrimenti elabora l'elemento specificato e restituisce il risultato elaborato. L'interfacciaItemProcessor<I,O> rappresenta il processore.
Tasklet class - Quando no reader e writervengono forniti, un Tasklet funge da processore per SpringBatch. Elabora solo un singolo compito.
Possiamo definire un elaboratore di articoli personalizzato implementando l'interfaccia ItemProcessor del pacchetto org.springframework.batch.item.ItemProcessor. Questa classe ItemProcessor accetta un oggetto ed elabora i dati e restituisce i dati elaborati come un altro oggetto.
In un processo batch, se "n"i record o gli elementi di dati vengono letti, quindi per ogni record leggerà i dati, li elaborerà e li scriverà nel writer. Per elaborare i dati, si inoltra sul processore passato.
Ad esempio, supponiamo di aver scritto del codice per caricare un particolare documento PDF, creare una nuova pagina, scrivere l'elemento di dati sul PDF in un formato tabulare. Se esegui questa applicazione, legge tutti gli elementi di dati dal documento XML, li memorizza nel database MySQL e li stampa nel documento PDF fornito in singole pagine.
Esempio
Di seguito è una classe ItemProcessor di esempio.
import org.springframework.batch.item.ItemProcessor;
public class CustomItemProcessor implements ItemProcessor<Tutorial, Tutorial> {
@Override
public Tutorial process(Tutorial item) throws Exception {
System.out.println("Processing..." + item);
return item;
}
}