use*_*567 5 java spring spring-batch
我正在尝试创建一个Spring Batch作业,该作业将处理将通过REST调用提供的xml文件.
我正在尝试使用托管在互联网上的XML文件来测试它.该文件位于:http://www.w3schools.com/xml/plant_catalog.xml
我在本地下载了这个文件,并且能够将它转换为一个对象并编写它,但我不知道如何在不在本地下载文件的情况下也能这样做.这在本地工作,但是如何指定URL作为要读取的xml文件的资源?谢谢 :)
发射后的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>
Run Code Online (Sandbox Code Playgroud)
自定义读者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>
Run Code Online (Sandbox Code Playgroud)
作为参考,如果有人想看到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>
Run Code Online (Sandbox Code Playgroud)
需要StaxEventItemReader一个Resource. 看一下文档,您会发现您可以轻松使用文件系统上不存在的资源。任何可以获得输入流的东西都可以转换为资源。据我所知,默认使用一个UrlResource后备。ClasspathResource
4.3.1. 网址资源
UrlResource 包装了 java.net.URL,可用于访问通常可通过 URL 访问的任何对象,例如文件、HTTP 目标、FTP 目标等。所有 URL 都具有标准化的字符串表示形式,例如适当的标准化前缀用于指示一种 URL 类型与另一种 URL 类型。这包括 file: 用于访问文件系统路径、http: 用于通过 HTTP 协议访问资源、ftp: 用于通过 FTP 访问资源等。 UrlResource 是由 Java 代码显式使用 UrlResource 构造函数创建的,但通常会在您使用 UrlResource 构造函数时隐式创建。调用一个 API 方法,该方法采用 String 参数,该参数表示路径。对于后一种情况,JavaBeans PropertyEditor 将最终决定创建哪种类型的资源。如果路径字符串包含一些众所周知的(对它而言)前缀,例如 classpath:,它将为该前缀创建适当的专用资源。但是,如果它无法识别前缀,它将假定这只是一个标准 URL 字符串,并创建一个 UrlResource。
所以你可能可以使用这个:
<property name="resource" value="http://www.w3schools.com/xml/plant_catalog.xml" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8918 次 |
| 最近记录: |