如何通过注释而不是常规配置文件配置入站通道适配器?我可以为会话工厂定义bean,如下所示:
@Bean
public DefaultFtpSessionFactory ftpSessionFactory() {
DefaultFtpSessionFactory ftpSessionFactory = new
DefaultFtpSessionFactory();
ftpSessionFactory.setHost(host);
ftpSessionFactory.setPort(port);
ftpSessionFactory.setUsername(username);
ftpSessionFactory.setPassword(password);
return ftpSessionFactory;
}
如何配置通过注释指定的入站通道适配器?
channel="ftpChannel"
session-factory="ftpSessionFactory"
filename-pattern="*.xml"
auto-create-local-directory="true"
delete-remote-files="false"
remote-directory="/"
local-directory="ftp-inbound"
local-filter="acceptOnceFilter">
@Artem Bilan
修改后的代码如下
@EnableIntegration
@Configuration
public class FtpConfiguration {
@Value("${ftp.host}")
private String host;
@Value("${ftp.port}")
private Integer port;
@Value("${ftp.username}")
private String username;
@Value("${ftp.password}")
private String password;
@Value("${ftp.fixed.delay}")
private Integer fixedDelay;
@Value("${ftp.local.directory}")
private String localDirectory;
private final static Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@Bean
public SessionFactory ftpSessionFactory() {
DefaultFtpSessionFactory sessionFactory = new DefaultFtpSessionFactory();
sessionFactory.setHost(host);
sessionFactory.setPort(port);
sessionFactory.setUsername(username);
sessionFactory.setPassword(password);
return new CachingSessionFactory(sessionFactory);
}
@Bean
public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
FtpInboundFileSynchronizer fileSynchronizer = new FtpInboundFileSynchronizer(ftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory("/");
fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(value = "ftpChannel",
poller = @Poller(fixedDelay = "60000", maxMessagesPerPoll = "-1"))
public MessageSource ftpMessageSource() {
FtpInboundFileSynchronizingMessageSource source =
new FtpInboundFileSynchronizingMessageSource(ftpInboundFileSynchronizer());
source.setLocalDirectory(new File(localDirectory));
source.setAutoCreateLocalDirectory(true);
source.setLocalFilter(new AcceptOnceFileListFilter());
return source;
}
}
运行此程序时,出现如下异常
没有定义名为“ ftpChannel”的bean
请注意,在连接入站通道适配器时,“ channel”关键字不可用,而是“ value”.
我试图用PollableChannel来连接通道,但是它也没有用.如下所示:
@Bean
public MessageChannel ftpChannel() {
return new PollableChannel() {
@Override
public Message> receive() {
return this.receive();
}
@Override
public Message> receive(long l) {
return null;
}
@Override
public boolean send(Message> message) {
return false;
}
@Override
public boolean send(Message> message, long l) {
return false;
}
};
}
我收到一个错误“无法在超时内发送消息:-1”.我还在做错什么吗?
我正在寻找的是在应用程序启动时连接所有Bean,然后公开一些方法以开始轮询服务器,对其进行处理,然后从本地将其删除,诸如此类
public void startPollingTheServer() {
getPollableChannel().receive();
}
其中的getPollableChannel()给了我为轮询连接的bean.
解决方法:
有一个@InboundChannelAdapter为您.
@Bean
public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
FtpInboundFileSynchronizer fileSynchronizer = new FtpInboundFileSynchronizer(ftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory("/");
fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(channel = "ftpChannel")
public MessageSource ftpMessageSource() {
FtpInboundFileSynchronizingMessageSource source =
new FtpInboundFileSynchronizingMessageSource(ftpInboundFileSynchronizer());
source.setLocalDirectory(new File("ftp-inbound"));
source.setAutoCreateLocalDirectory(true);
source.setLocalFilter(new AcceptOnceFileListFilter());
return source;
}
@Bean
public IntegrationFlow ftpInboundFlow() {
return IntegrationFlows
.from(s -> s.ftp(this.ftpSessionFactory)
.preserveTimestamp(true)
.remoteDirectory("ftpSource")
.regexFilter(".*\\.txt$")
.localFilename(f -> f.toUpperCase() + ".a")
.localDirectory(this.ftpServer.getTargetLocalDirectory()),
e -> e.id("ftpInboundAdapter").autoStartup(false))
.channel(MessageChannels.queue("ftpInboundResultChannel"))
.get();
}
标签:java,spring-integration
来源: https://codeday.me/bug/20191118/2027952.html