我正在尝试使用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>
答案 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();
}
}