是否有机会从java代码中的入站通道适配器更改/设置某些属性的值?
我需要从ftp服务器下载特定文件。在运行应用程序之前我不知道哪个文件,所以我必须动态设置filename-pattern
。
我发现了一个关于此的问题,但没有正确答案,所以我再问一遍。
这是我的inbound-channel-adapter
配置:
<int-ftp:inbound-channel-adapter local-directory="ftp"
channel="getFtpChannel"
session-factory="ftpClientFactory"
charset="UTF-8"
remote-directory="${remote-download-directory}"
remote-file-separator="/"
auto-create-local-directory="true"
delete-remote-files="false"
filename-pattern="">
<int:poller fixed-rate="10000"/>
</int-ftp:inbound-channel-adapter>
我想设置/更改filename-pattern
。
这是我的代码根据此属性接收文件,但仅当我在我的配置中设置它时:
ConfigurableApplicationContext context =
new FileSystemXmlApplicationContext("/src/citrus/resources/citrus-context.xml");
PollableChannel channel =
context.getBean("getFtpChannel", PollableChannel.class);
channel.receive();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
fail(e.getMessage());
}
context.close();
答案 0 :(得分:2)
不能在运行时更改filename-pattern
,因为该选项已填充到FtpSimplePatternFileListFilter
final
path
。
但是,您可以实施自己的FileListFilter<?>
并将其注入filter
的{{1}}选项。
由于你的<int-ftp:inbound-channel-adapter>
将是一个bean,你只需从上下文中获取它并调用它FileListFilter<?>
。
<强>更新强>
这样的事情:
setPattern()
用法
public class MyFtpPatterFileListFilter extends AbstractFileListFilter<FTPFile> {
private final AntPathMatcher matcher = new AntPathMatcher();
private volatile String pattern;
public void setPattern(String pattern) {
this.pattern = pattern;
}
@Override
protected boolean accept(FTPFile file) {
return !StringUtils.hasText(this.pattern) || this.matcher.match(this.pattern, this.getFilename(file));
}
private String getFilename(FTPFile file) {
return (file != null) ? file.getName() : null;
}
}
并修改:
<int-ftp:inbound-channel-adapter filter="myFtpFilter">