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;
}
}