- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试创建一个 Spring Batch 作业,该作业将处理一个将通过 REST 调用提供的 xml 文件。
我正在尝试使用托管在 Internet 上的 XML 文件来对此进行测试。该文件位于:http://www.w3schools.com/xml/plant_catalog.xml
我在本地下载了这个文件并且能够将它转换为一个对象并写入它,但我不知道如果不在本地下载文件我该如何做同样的事情。这在本地有效,但我如何指定一个 URL 作为 xml 文件读取的资源?谢谢:)
启动上下文.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 的东西都可能被转换为 Resource。据我所知,默认情况下使用 UrlResource
回退到 ClasspathResource
。
4.3.1. UrlResource
The UrlResource wraps a java.net.URL, and may be used to access any object that is normally accessible via a URL, such as files, an HTTP target, an FTP target, etc. All URLs have a standardized String representation, such that appropriate standardized prefixes are used to indicate one URL type from another. This includes file: for accessing filesystem paths, http: for accessing resources via the HTTP protocol, ftp: for accessing resources via FTP, etc. A UrlResource is created by Java code explicitly using the UrlResource constructor, but will often be created implicitly when you call an API method which takes a String argument which is meant to represent a path. For the latter case, a JavaBeans PropertyEditor will ultimately decide which type of Resource to create. If the path string contains a few well-known (to it, that is) prefixes such as classpath:, it will create an appropriate specialized Resource for that prefix. However, if it doesn't recognize the prefix, it will assume the this is just a standard URL string, and will create a UrlResource.
所以你可以只使用这个:
<property name="resource" value="http://www.w3schools.com/xml/plant_catalog.xml" />
关于java - Spring 批处理 : Create an ItemReader that reads an xml file from a web service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19231689/
我已经创建了我的自定义 ItemReader: @Component("pricereader") public class MyItemReader implements ItemReader{ @
我正在尝试访问 itemReader 中的 JobParameters,我遵循了 Spring 用户指南中的“作业和步骤属性的后期绑定(bind)”,但无法使其工作。 这是我的配置: Spring 批
我正在从数据库中读取数据,它有很多行,是的,但是“我认为读者在该步骤中释放了内存”。它需要超过 1Gb 的内存。怎样才能改善呢?使用另一种阅读器? ...
我正在使用 Spring Batch 的 ItemReader 来读取文件 我的输入文件包含由 分隔的一长串字符串, 如下所示: 2333,443445,5555,3344... 每个字符串都应该转换
我用 JdbcTemplate 实现了 ItemReader 。 问题是 read() 在无限循环中被调用。 public class MyReader implements ItemReader,
使用 Spring Batch 我试图将输入文件的每一行作为 String 提供给 ItemProcessor 而 中没有任何“CSV 解析”项目阅读器。 我提出了一个包含以下 reader() 方法
在我的 springbatch+quartz 设置中,我正在使用 FlatFileItemReader 读取一个 CSV 文件。我想为读者设置光标以使用给定的读者参数启动下一个作业实例。是否可以?
以下是我的 Spring Batch 用例。 从 Web 服务读取输入。 Web 服务将返回所有记录。 处理记录。 将处理过的记录一一写入。 我很清楚第 2 步和第 3 步,但无法弄清楚如何实现一个可
我有一个 Spring Batch 应用程序,它使用 JdbcCursorItemReader 从数据库表中读取数据,并使用 FlatFileItemWriter 将其写入平面文件。 当我测试我的应用
我有一个 Spring Batch 应用程序,它使用 JdbcCursorItemReader 从数据库表中读取数据,并使用 FlatFileItemWriter 将其写入平面文件。 当我测试我的应用
我正在尝试读取固定长度的文本文件并使用 spring Batch 将其寄存器导入数据库,但输入文件的常规布局是嵌套的,类似于(添加制表只是为了简化可视化): FILE HEADER ENTER
我想验证文件名和记录。我的应用上下文如下 我的项目阅读器上下文如下所示
我在我的批处理 Spring 项目中定义了一个作业流,并定义了 ItemReader、ItemProcessor、ItemWriter 等 我的 ItemReader 如下代码: @Component
我有一个带有简单自定义读取器和写入器的 Spring Batch 项目。当我运行代码时,我最终会出现一个无限循环,打印第一个项目“项目 1”。我究竟做错了什么? 这是我的代码: Reader.java
我刚刚开始使用 Spring Batch,想知道维护要在 ItemReader 中读取的项目列表的最佳实践是什么。我看到的例子是这样的: private static List items = new
我目前有一个应用程序,我正在尝试诊断我在设置中所做的错误,但没有运气确定为什么它在非常特定的情况之外无法工作。 首先是我正在使用的代码。 配置.java @EnableBatchProcessing
我正在尝试使用 ListItemReader 创建一个 Spring Batch 作业, ItemProcessor和 ItemWriter . XML 如下所示,
我有一个从数据库读取的多线程批处理作业,我担心不同的线程会重新读取记录,因为 ItemReader 在 Spring 批处理中不是线程安全的。我经历了SpringBatch FAQ部分指出 You c
当我尝试读取 csv 文件时,Spring 批处理遇到了这个问题。 我必须读取具有如下结构的CSV: valueHeader;valueHeader;valueHeader;valueHeader;v
我有一个 Spring Batch 项目,其中有 JsonResouurceAsyncPagingItemReader,这是一个自定义 ItemReader,它从 Web 服务异步检索数据。 此自定义
我是一名优秀的程序员,十分优秀!