Spring集成Poller不会轮询应用程序启动后进入目录的文件

时间:2016-05-18 19:40:24

标签: spring spring-integration

我有一个spring批处理集成应用程序,其中SI部分读取文件的文件夹并调用该文件的spring作业。现在,当我启动我的应用程序时,它会读取文件夹中的所有可用文件,但如果在应用程序启动后出现任何文件,则轮询器不会选择该文件。下面是我的相同代码

配置

<int:poller id="appPoller" 
default="false" 
fixed-rate="1000"  
max-messages-per-poll="1" >
    <int:advice-chain>
<ref bean="inputDirChangeAdvice"/> 
</int:advice-chain>

</int:poller>
<bean id="inputDirChangeAdvice" class="com.varun.processor.ChangeDirAdvice" />
<int:channel id="files"/>

<int:channel id="requests"/>

<int:channel id="statuses">
    <int:queue capacity="10"/>
</int:channel>

<int-file:inbound-channel-adapter   id="pollAppFiles"
                                    prevent-duplicates="true"
                                    ignore-hidden="true"
                                    directory="file:/"
                                    filename-pattern="*.DAT"
                                    channel="files">
                                    <int:poller ref="appPoller"/>
                                <int-file:locker ref="appLocker"/>
</int-file:inbound-channel-adapter>
<bean id="appLocker" class="com.varun.locker.APPFileLocker" />

<int:transformer id="prepareJobLaunchRequest"
    input-channel="files" output-channel="requests">
    <bean class="com.varun.transformer.FileMessageToJobRequest">
        <property name="job" ref="JobName"/>
        <property name="fileParameterName" value="AbsoluteInputFile"/>
    </bean>
</int:transformer>

<int:service-activator id="runJob" method="launch" input-channel="requests"
    output-channel="statuses">
    <bean class="org.springframework.batch.integration.launch.JobLaunchingMessageHandler">
        <constructor-arg ref="jobLauncher"/>
    </bean>
</int:service-activator>    

我在poller上使用建议,以便轮询器根据某些条件从动态位置读取。

更新

建议代码如下

public class ChangeDirAdvice extends AbstractMessageSourceAdvice {

@Autowired
@Qualifier("pollAppFiles.source")
private FileReadingMessageSource fileReadingMessageSource;


@Override
public boolean beforeReceive(MessageSource<?> source) {
    //calculate Dynamic directory location
    this.fileReadingMessageSource.setDirectory(newDirectory);
    return true;
}

@Override
public Message<?> afterReceive(Message<?> result, MessageSource<?> source) {
    // TODO Auto-generated method stub
    return result;
}

1 个答案:

答案 0 :(得分:0)

从配置角度看,一切看起来都不错,而且这个功能也是开箱即用的。所以,如果它没有起作用,我们就此问题就有了很多JIRA ......

尽量减少应用程序以隔离问题。

例如,请勿使用inputDirChangeAdviceappLocker。甚至只是记录消息并且不能完成这项工作。

可能其中一些人stop() pollAppFiles并忘记start() ...

如果您仍然确定Framework透视图中存在一些错误,请通过GitHub分享尽可能简单的应用程序,以便在本地播放。