本文介紹了Spring Batch:創(chuàng)建從Web服務(wù)讀取XML文件的ItemReader的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我正在嘗試創(chuàng)建一個Spring批處理作業(yè),該作業(yè)將處理將通過睡覺調(diào)用提供的xml文件。
我正在嘗試使用Internet上托管的XML文件來測試這一點。該文件位于:http://www.w3schools.com/xml/plant_catalog.xml
我在本地下載了此文件,并能夠?qū)⑵滢D(zhuǎn)換為對象并寫入,但如果不將文件下載到本地,我不知道如何才能做到這一點。這在本地有效,但是如何將URL指定為XML文件要讀取的資源呢?謝謝:)
Launch-context.xml
<batch:job id="job1">
<batch:step id="step1">
<batch:tasklet transaction-manager="transactionManager" start-limit="100" >
<batch:chunk reader="CustomPlantReader" writer="writer" commit-interval="1" />
</batch:tasklet>
</batch:step>
</batch:job>
自定義讀卡器bean:
<bean id="CustomPlantReader" class="org.springframework.batch.item.xml.StaxEventItemReader" scope="step">
<property name="fragmentRootElementName" value="PLANT" />
<property name="resource" value="file:/C:/source/plant_catalog.xml" />
<property name="unmarshaller" ref="PlantUnmarshaller" />
</bean>
<bean id="PlantUnmarshaller" class="org.springframework.oxm.castor.CastorMarshaller">
<property name="ignoreExtraElements" value="true" />
<property name="mappingLocation" value="linemapper/mapping.xml" />
</bean>
作為參考,如果任何人想要查看mapping.xml文件,其外觀如下所示。它將XML節(jié)點映射到名為Plant.java的域?qū)ο?/p>
<mapping>
<class name="com.example.project.Plant">
<map-to xml="PLANT" />
<field name="common" type="string">
<bind-xml name="COMMON" node="element"/>
</field>
<field name="botanical" type="string">
<bind-xml name="BOTANICAL" node="element"/>
</field>
<field name="zone" type="string">
<bind-xml name="ZONE" node="element"/>
</field>
<field name="light" type="string">
<bind-xml name="LIGHT" node="element"/>
</field>
<field name="price" type="string">
<bind-xml name="PRICE" node="element"/>
</field>
<field name="availability" type="string">
<bind-xml name="AVAILABILITY" node="element"/>
</field>
</class></mapping>
推薦答案
StaxEventItemReader
接受Resource
。
看一下documentation,您會發(fā)現(xiàn)您可以很容易地使用不在您的文件系統(tǒng)上的資源。任何可以獲取InputStream的內(nèi)容都可能轉(zhuǎn)換為資源。
據(jù)我所知,默認使用UrlResource
,后備為ClasspathResource
。
4.3.1。URL資源
UrlResource包裝了java.net.URL,并可用于訪問任何通??赏ㄟ^URL訪問的對象,如文件、
HTTP目標、FTP目標等。所有URL都具有標準化字符串
表示,以便使用適當?shù)臉藴驶熬Y
若要指示不同的URL類型,請執(zhí)行以下操作。這包括FILE:FOR
訪問文件系統(tǒng)路徑,http:用于通過HTTP訪問資源
協(xié)議、ftp:用于通過FTP等訪問資源。
UrlResource由Java代碼使用UrlResource構(gòu)造函數(shù)顯式創(chuàng)建,但在執(zhí)行以下操作時通常會隱式創(chuàng)建
調(diào)用帶有字符串參數(shù)的API方法,該參數(shù)旨在
表示一條路徑。對于后一種情況,JavaBeans PropertyEditor將
最終決定要創(chuàng)建哪種類型的資源。如果路徑字符串
包含一些眾所周知的(也就是)前綴,如
classpath:,它將為以下對象創(chuàng)建適當?shù)膶S觅Y源
那個前綴。但是,如果它不能識別前綴,它將
假設(shè)這只是一個標準URL字符串,并將創(chuàng)建一個
UrlResource。
所以您可以使用以下命令:
<property name="resource" value="http://www.w3schools.com/xml/plant_catalog.xml" />
這篇關(guān)于Spring Batch:創(chuàng)建從Web服務(wù)讀取XML文件的ItemReader的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,