專案讀取器將資料從特定原始碼讀入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
每次讀取一個專案。 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
一次寫入一個專案。 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;
}
}