基于当前日期的spring集成动态过滤器

时间:2018-12-17 21:37:20

标签: spring-integration

我正在尝试使用ftp-inbound-adapter根据当前日期来轮询文件,而我的入站适配器使用了一个引用bean myfilter的过滤器。问题是当前日期在启动时是不完整的,并且没有动态处理。.我想获取每条新消息的当前日期

3

更新

我从这里改变了                      

    <int-ftp:inbound-channel-adapter id="ftpInbound"
                    channel="ftpChannel"
                    session-factory="ftpsClientFactory"
                    filter="myFilter"
    </int-ftp:inbound-channel-adapter>

    <bean id="myFilter" class="org.springframework.integration.ftp.filters.FtpRegexPatternFileListFilter" scope="prototype">
        <constructor-arg value="#{T(java.time.LocalDateTime).now().format(T(java.time.format.DateTimeFormatter).ofPattern('MMddyy'))}.(xls|xlsx)"/>
        <aop:scoped-proxy/>
        </bean>

然后我的入站适配器使用了一个指向bean myFilter的过滤器。这里的问题是当前日期在启动时就被定为尾,并且没有被动态处理。我想获取每个新消息的当前日期< / p>

1 个答案:

答案 0 :(得分:0)

对于当前配置,这是不可能的,因为filter只是一个singleton bean,在启动时仅创建了一次,因此将currentDate也仅注入了一次。

您可以尝试将<aop:scoped-proxy/>添加到currentDate bean定义中,尽管:https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#beans-factory-scopes-other-injection,但是我建议将BeanFactorty注入您的filter中,然后每当您需要该原型的新实例时,请调用getBean("currentDate", Date.class)

更新

您将BeanFactory而不是那个filter bean注入了currentDate。然后在调用过滤器逻辑时执行Date currentDate = this.beanFactory.getBean("currentDate", Date.class);

UPDATE2

这是我认为应该为您工作的:

public class DynamicRegexPatternFilter extends AbstractFileListFilter<File> {

    @Autowired
    private BeanFactory beanFactory;

    @Override
    public boolean accept(File file) {
        return Pattern.compile(this.beanFactory.getBean("currentDate", String.class) + ".(xls|xlsx)")
                .matcher(file.getName())
                .matches();
    }

}