Spring SFTP改变了filename-regex

时间:2016-12-01 06:06:21

标签: spring spring-integration

想知道Spring Integration SFTP入站适配器是否支持在运行时变化的filename-regex。

filename-regex看起来像"^(foo_|bar_)" + new java.text.SimpleDateFormat("yyyyMMdd"). format(new java.util.Date()) +".txt$"

我有自动启动=" true"在入站适配器设置中设置。

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

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

2 个答案:

答案 0 :(得分:1)

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

您认为它不是专为SpEL设计的,只适用于常规pattern

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

另一种解决方案是使用SftpRegexPatternFileListFilter.setPattern(),例如,如果您需要与轮询率相关联,请使用一些轮询器建议。虽然第一个解决方案也可行,但因为看起来你将依赖唯一的new Date()

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

答案 1 :(得分:1)

您可以继承SftpRegexPatternFileListFilter并将每次调用时的模式更新为accept - setPatternreturn super.accept(file)

您可以优化它以仅在检测到日期更改时编译新模式。