我有一个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;
}
答案 0 :(得分:0)
从配置角度看,一切看起来都不错,而且这个功能也是开箱即用的。所以,如果它没有起作用,我们就此问题就有了很多JIRA ......
尽量减少应用程序以隔离问题。
例如,请勿使用inputDirChangeAdvice
和appLocker
。甚至只是记录消息并且不能完成这项工作。
可能其中一些人stop()
pollAppFiles
并忘记start()
...
如果您仍然确定Framework透视图中存在一些错误,请通过GitHub分享尽可能简单的应用程序,以便在本地播放。