【问题标题】:Spring SFTP varying filename-regexSpring SFTP 不同的文件名-正则表达式
【发布时间】:2017-04-15 16:19:05
【问题描述】:

想知道 Spring Integration SFTP 入站适配器是否支持在运行时变化的文件名正则表达式。

文件名正则表达式看起来像"^(foo_|bar_)" + new java.text.SimpleDateFormat("yyyyMMdd"). format(new java.util.Date()) +".txt$"

我在入站适配器设置中设置了 auto-startup="true"。

在我的测试用例中,使用固定速率 =“1000”时间单位 =“MILLISECONDS”的轮询器,它将当天的正确文件复制到本地目录。但是,如果我在系统仍在轮询时更改系统日期,则它不会获取新日期的文件。如果我重新运行测试,它会起作用。

我的理解是它应该有效。不是因为它是从 JUnit 运行的吗?

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    您可以将SftpRegexPatternFileListFilter 子类化,并在每次调用accept - setPatternreturn super.accept(file) 时更新模式。

    您可以对其进行优化,使其仅在检测到日期更改时编译新模式。

    【讨论】:

      【解决方案2】:

      filename-regex 选项在运行时变为SftpRegexPatternFileListFilter 对象。

      你知道它不是为 SpEL 设计的,只是为普通的 pattern 设计的。

      您的解决方案之一是使用动态模式编译实现您自己的FileListFilter

      另一个解决方案是使用SftpRegexPatternFileListFilter.setPattern(),比如说,一些投票者的建议,如果您需要与投票率相关联。虽然第一个解决方案也可以,因为看起来您将依赖唯一的new Date()

      尽管如此,“更改系统日期”并希望所有基于日期的组件都重新计算其状态并不是一个好主意。我认为这是非常关键的操作,最好在更改系统日期后重新启动应用程序。

      【讨论】:

      • 我认为他更改日期只是为了测试他的解决方案。
      • 没错。它用于测试,尽管我的实时场景几乎相同。当日期更改 EOD 时,轮询器应该选择下一个日期。我会尝试解决方案并随时通知您。多谢你们。这有帮助。
      猜你喜欢
      • 2014-08-06
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多