Spring Batch讀取器,寫入器和處理器
項目讀取器將數據從特定源代碼讀入Spring批處理應用程序,而項目寫入器將數據從Spring Batch應用程序寫入特定目標。
Item處理器是一個包含處理代碼的類,該代碼處理讀入spring批處理的數據。 如果應用程序讀取n
條記錄,則處理器中的代碼將在每條記錄上執行。
塊(chunk)是該tasklet的子元素。 它用於執行讀取,寫入和處理操作。 可以在如下所示的步驟中配置使用此元素的讀取器,寫入器和處理器。
<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爲讀取器和寫入器提供讀寫MongoDB,Neo4j,MySQL,XML,flatfile,CSV等各種文件系統/數據庫的數據。
要在應用程序中包含讀取器,需要爲該讀取器定義一個bean,爲該bean中的所有必需屬性提供值,並將該bean的id作爲值傳遞給chunk
元素的readers
屬性(或writer
屬性)。
ItemReader
它是讀取數據的一個步驟(批處理過程)的實體。 ItemReader
每次讀取一個項目。 Spring Batch提供了一個ItemReader接口。 所有的讀者都實現這個接口。
以下是由Spring Batch提供的一些預定義的ItemReader
類,用於從各種源讀取。
讀取器
目的
FlatFIleItemReader
從文件中讀取數據。
StaxEventItemReader
從XML文件讀取數據。
StoredProcedureItemReader
從數據庫的存儲過程讀取數據。
JDBCPagingItemReader
從關係數據庫中讀取數據。
MongoItemReader
從MongoDB讀取數據。
Neo4jItemReader
從Neo4j讀取數據。
需要通過創建bean來配置ItemReaders。 以下是從XML文件讀取數據的StaxEventItemReader
示例。
<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>
正如所觀察到的,在配置時,我們需要指定所需閱讀器的相應類名,並且需要爲所有必需的屬性提供值。
ItemWriter
這是寫入數據的批處理步驟的要素。 ItemWriter
一次寫入一個項目。 Spring Batch提供了一個ItemWriter接口。 所有的作家都實現了這個接口。
以下是由Spring Batch提供的一些預定義的ItemWriter
類,用於從各種源讀取。
寫入器
目的
FlatFIleItemWriter
將數據寫入文件。
StaxEventItemWriter
將數據寫入XML文件
StoredProcedureItemWriter
將數據寫入數據庫的存儲過程。
JDBCPagingItemWriter
將數據寫入關係數據庫數據庫。
MongoItemWriter
將數據寫入MongoDB。
Neo4jItemWriter
將數據寫入Neo4j。
同樣,需要通過創建bean來配置ItemWriters
。 以下是將數據寫入MySQL數據庫的JdbcCursorItemReader
示例。
<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>
項目處理器
ItemProcessor:ItemProcessor
用於處理數據。 當給定的項目無效時,它返回null
,否則它處理給定的項目並返回處理結果。 接口ItemProcessor <I,O>
表示處理器。
Tasklet類 - 當沒有給出讀寫器時,Tasklet
充當SpringBatch的處理器。 它只處理單個任務。
可以通過實現包org.springframework.batch.item.ItemProcessor
的接口ItemProcessor
來定義一個自定義項目處理器。ItemProcessor
類接受一個對象並處理數據並將處理後的數據作爲另一個對象返回。
在批處理過程中,如果讀取了「n」
個記錄或數據元素,那麼對於每個記錄,它將讀取數據,處理數據並將數據寫入寫入器。 爲了處理數據,它在通過的處理器上進行中繼。
例如,假設您已經編寫了代碼來加載特定的PDF文檔,創建一個新頁面,並以表格格式將該數據項寫入PDF中。 如果執行此應用程序,它將讀取XML文檔中的所有數據項,將它們存儲在MySQL數據庫中,並將它們打印到單個頁面中給定的PDF文檔中。
示例
以下是一個ItemProcessor
類示例。
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;
}
}