如何仅在成功进行FTP文件传输时触发要发送到JdbcOutboundGateway的邮件?
我有以下IntegrationFlow。它根据需要将文件上传到FTP服务器。但是,我需要向DB写入该文件已成功上载,或者如果FTP上载失败则更新记录。我无法确定如何在文件传输成功时启动数据库更新。在我尝试继续流程的任何地方,它只是抛出一个异常,声明它是“单向的”。
流程:
@Bean
public IntegrationFlow fromOutboundChannelToFtp(OutboundConfigurationProperties ftpProps,
@Qualifier(OUTBOUND_CHANNEL) MessageChannel outboundMessages,
@Qualifier(FTP_SESSION_FACTORY_FACTORY) FtpSessionFactoryFactory ftpSessionFactoryFactory) {
return IntegrationFlows.from(outboundMessages)
.route(RECEIVER_HEADER_SPEL, mapping -> {
for (String receiverId : ftpProps.getFtp().keySet()) {
mapping.subFlowMapping(receiverId, sf -> {
sf.handleWithAdapter(adapter ->
adapter.ftp(ftpSessionFactoryFactory.getFactory(receiverId))
.fileNameExpression(FILENAME_HEADER_SPEL)
.autoCreateDirectory(true)
.remoteDirectory(ftpProps.getValue(receiverId, FtpProp.DIRECTORY))
);
});
}
})
.get();
}
答案 0 :(得分:1)
使outboundMessages
成为发布/订阅通道,并使用JDBC适配器订阅第二个流。在路由器和jdbc适配器使用者上设置order
属性,以确保以正确的顺序调用它们。
默认情况下,如果第一个消费者失败,则不会调用第二个消费者。
在流入口点(通道上游)使用错误通道来处理故障。
或者,将ExpressionEvaluatingMessageHandlerAdvice
添加到ftp适配器,并在success
频道上添加JDBC适配器流,并在failure
频道上添加其他更新流。