Spring Batch:创建从Web服务读取XML文件的ItemReader
我正在尝试创建一个Spring批处理作业,该作业将处理将通过睡觉调用提供的xml文件。
我正在尝试使用Internet上托管的XML文件来测试这一点。该文件位于:http://www.w3schools.com/xml/plant_catalog.xml
我在本地下载了此文件,并能够将其转换为对象并写入,但如果不将文件下载到本地,我不知道如何才能做到这一点。这在本地有效,但是如何将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节点映射到名为Plant.java的域对象
<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,您会发现您可以很容易地使用不在您的文件系统上的资源。任何可以获取InputStream的内容都可能转换为资源。
据我所知,默认使用UrlResource
,后备为ClasspathResource
。
4.3.1。URL资源
UrlResource包装了java.net.URL,并可用于访问任何通常可通过URL访问的对象,如文件、 HTTP目标、FTP目标等。所有URL都具有标准化字符串 表示,以便使用适当的标准化前缀 若要指示不同的URL类型,请执行以下操作。这包括FILE:FOR 访问文件系统路径,http:用于通过HTTP访问资源 协议、ftp:用于通过FTP等访问资源。 UrlResource由Java代码使用UrlResource构造函数显式创建,但在执行以下操作时通常会隐式创建 调用带有字符串参数的API方法,该参数旨在 表示一条路径。对于后一种情况,JavaBeans PropertyEditor将 最终决定要创建哪种类型的资源。如果路径字符串 包含一些众所周知的(也就是)前缀,如 classpath:,它将为以下对象创建适当的专用资源 那个前缀。但是,如果它不能识别前缀,它将 假设这只是一个标准URL字符串,并将创建一个 UrlResource。
所以您可以使用以下命令:
<property name="resource" value="http://www.w3schools.com/xml/plant_catalog.xml" />
相关文章