使用Spring Integration轮询文件的问题

时间:2017-03-01 08:55:50

标签: spring-integration polling

我的要求。是在指定的时间间隔(例如10分钟)内轮询目录。如果特定扩展名的文件在目录中找到* .xml,则它只消耗(即选择和删除)文件,并在指定时间(比如10分钟)之后打印其他名称。该文件尚未被选中(即消耗)或文件尚未到来。

我可以通过Spring集成或Core Java的WatchService来实现两个选项。以下是我迄今为止编写的Spring Integration中的代码:

<int:channel id="fileChannel" />
<int:channel id="processedFileChannel" />

<context:property-placeholder location="localProps.properties" />

    <int:poller default="true" fixed-rate="10000" id="poller"></int:poller>

    <int-file:inbound-channel-adapter
        directory="file:${inbound.folder}" channel="fileChannel"
        filename-pattern="*.xml" />

    <int:service-activator input-channel="fileChannel"
        ref="fileHandlerService" method="processFile" output-channel="processedFileChannel"/>

    <bean id="fileHandlerService" class="com.practice.cmrs.springintegration.Poll" />

以上代码成功轮询特定文件模式的文件夹。现在我有两件事要做:

1)在特定时间间隔(可配置)后停止轮询说10分钟。

2)检查文件夹中是否有特定扩展名的文件...如果文件在那里(它消耗然后删除),否则它会向一组人发送电子邮件(电子邮件部分已完成。)

请在以上2点帮助我。

1 个答案:

答案 0 :(得分:0)

您可以使用Smart Poller来执行此类操作。

如果/当投票结果显示消息时,您可以调整轮询器和/或采取不同的操作。

  

4.2版引入了AbstractMessageSourceAdvice。在类的子类的通知链中的任何Advice对象仅应用于接收操作。这些类实现以下方法:

beforeReceive(MessageSource<?> source)
  

在MessageSource.receive()方法之前调用此方法。它使您可以在此时检查和/或重新配置源。返回false取消此轮询(类似于上面提到的PollSkipAdvice)。

Message<?> afterReceive(Message<?> result, MessageSource<?> source)
  

此方法在receive()方法之后调用;再次,您可以重新配置源,或者根据结果采取任何操作(如果源没有创建消息,则可以为null)。你甚至可以回复另一条消息!