Spring集成没有选择文件

时间:2015-03-07 10:24:53

标签: spring-integration

以下是我的配置。我能够直到最近才轮询文件。现在,过滤器总是获得一个空的文件列表。我所做的唯一改变是安装kaspersky防病毒软件。希望这不是问题。我可以从命令提示符以及浏览器成功访问ftp。

conf:

     <int:channel id="ftpChannel"/>

 <int-ftp:inbound-channel-adapter id="ftpInbound1"
    channel="ftpChannel"
    session-factory="ftpClientFactory"
    charset="UTF-8"
    local-directory="file:${paths.root}"
    delete-remote-files="false" 
    temporary-file-suffix=".writing"
    remote-directory="${file.ftpfolder}"
    preserve-timestamp="true"
     auto-startup="true" 
     filter="compositeFilterLocal"
     >
    <int:poller max-messages-per-poll="10000" fixed-rate="1000" error-channel="errorChannel"/>
</int-ftp:inbound-channel-adapter>

    <int-ftp:outbound-channel-adapter id="ftpOutbound"
    channel="ftpChannel"
    session-factory="ftpClientFactory"
    charset="UTF-8"
    remote-file-separator="/"
    auto-create-directory="true"
    remote-directory="DMS" 
    use-temporary-file-name="true"
     temporary-file-suffix=".writing">

  </int-ftp:outbound-channel-adapter>

<!-- <bean id="acceptAllFilter" class="org.springframework.integration.file.filters.AcceptAllFileListFilter" /> -->
 <bean id="compositeFilterLocal" class="org.springframework.integration.file.filters.CompositeFileListFilter">
        <constructor-arg>
            <list>
                <!-- Ensures that the file is whole before processing it -->
                <bean class="org.springframework.integration.file.filters.AcceptAllFileListFilter" />
                <bean class="com.polling.util.CustomFileFilterLocal"/>
                <!-- Ensures files are picked up only once from the directory -->

            </list>
        </constructor-arg>
    </bean>

请告诉我是否应该更改任何内容......谢谢

如果需要更多信息,请告诉我们!

编辑::更新 如果我使用Apache commons-net-3.3从同一个文件夹中检索相同的文件,它工作正常,允许我获取文件并下载它。所以这与jvm访问ftp站点无关。

EDIT ::过滤器的代码很简单。目前我只使用它进行模式匹配。

    @Override
public List<File> filterFiles(File[] files)
{
    List<File> ret = new ArrayList<File>();
    Pattern pattern = Pattern.compile(".*?~.*?");//(".*?@.*?@.*?");
    DocumentFile documentFile;
    Matcher matcher;
    for (File file : files) 
    {
        matcher = pattern.matcher(file.getName());
        if(matcher.find())// matching the input file name pattern
        {
            //get key and documentfile
            //create sha key to check file existance
            String key = EncodeUtil.generateKey(file);
            documentFile = documentDaoImpl.getDocumentFile(key,Constants.INPROGRESS);
            if (documentFile != null)
            {
                ret.add(file);
            }
        }/*else
        {
            file.delete();
        }*/
    }
    return ret;
}

我已经成功地使用了这个问题至少几个月,现在我突然间没有文件! 目前我正在使用计时器cron表达式,并将在触发类中使用apache commons-net执行ftp。尽管有弹簧ftp标签,这似乎是浪费不得不做ftp。

1 个答案:

答案 0 :(得分:1)

我已经使用您使用的配置构建了一个项目,一切似乎都正常。

您的代码中有一些部分(未在此处发布)可能导致丢弃过滤器中的文件,并且您必须检查(添加日志消息将有所帮助):

if (matcher.find())// matching the input file name pattern
{
    // get key and documentfile
    // create sha key to check file existance

    // TODO: does this call throw any exception? return null?
    String key = EncodeUtil.generateKey(file);
    documentFile = documentDaoImpl.getDocumentFile(key, Constants.INPROGRESS);
    if (documentFile != null) {
        ret.add(file);
    }
    else {
        // TODO: Log here that your DAO implementation did not return anything for this specific file
    }
}
  else { 
      // TODO: Log here that the file does not meet the naming convention
}