如何使Spring批处理文件名中具有特定单词的目录中的所有未处理文件

时间:2014-09-19 21:16:05

标签: spring spring-batch spring-batch-admin

我将从客户端的SFTP服务器收到一个或多个文件,这些文件存储在我们的本地目录中。该文件的名称将类似于DDMMYYYYHHMMSSIIXCFILE.XSMP#1234567890。因此在示例中除了字符串" XCFILE.XSMP"该文件具有不同的前缀和后缀,使文件非常独特。之前我们将文件重命名为XCFILE.XSMP并通过spring批处理,如下所示。 (我的配置非常类似于帖子here

 <property name="resource" value="file:${XCFILE.XSMP}" />

我现在有更多的用例:

  1. 现在我们将收到多个文件,这些文件将被放入同一本地目录
  2. 该目录还有一些其他文件根本不应该被处理(例如:我只需要处理其中包含&#34; XCFILE.XSMP&#34;的文件)
  3. My Spring Batch程序应该逐个读取所有未处理的XCFILE.XSMP文件并更新到我们的数据库中。
  4. 我的问题是:

    1. 如何将多个文件作为参数传递给Spring Batch。我是 从春天阅读this document
    2. 如何指定只考虑XCFILE.XSMP
    3. 如何确保仅处理未处理的文件
    4. 请给我一个机会,让我知道我的任何案件或疑问是否不清楚。感谢。

1 个答案:

答案 0 :(得分:0)

您的问题有几个方面:

如何通过Spring Batch读取多个文件。
MultiResourceItemReader可以使用SpEL表达式来定义您要阅读的文件。您可以为其配置resources属性,使其在您的情况下看起来像这样:

<bean id="inputTestReader" class="org.springframework.batch.item.file.MultiResourceItemReader">
    <property name="resources" value="file:some/path/*XCFILE.XSMP*" />
    <property name="delegate" ref="testItemReader" />
</bean>

以上示例还应解决仅读取XCFILE.XSMP文件的问题。

如何确保仅处理未处理的文件
处理的典型方法是移动或重命名已处理的文件,使其与正在读取的文件的表达式不匹配。这可以通过在完成文件时移动文件的监听器来完成。