JAVA适配器简单代码注释,java-Spring Integration:通过注释配置入站通道适配器

如何通过注释而不是常规配置文件配置入站通道适配器?我可以为会话工厂定义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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值