Spring integration Spring集成(JDBC-SFTP):读取一条记录,将其发送给SFTP并删除该记录
我对进入我们系统的每个传入消息都有以下要求 将传入文件转换为XML文件并保存在数据库中 从数据库中读取该文件并将其发送到SFTP 文件发送成功后删除条目。 我已成功实施步骤1:Spring integration Spring集成(JDBC-SFTP):读取一条记录,将其发送给SFTP并删除该记录,spring-integration,Spring Integration,我对进入我们系统的每个传入消息都有以下要求 将传入文件转换为XML文件并保存在数据库中 从数据库中读取该文件并将其发送到SFTP 文件发送成功后删除条目。 我已成功实施步骤1: <int-jdbc:outbound-channel-adapter query="insert into table_name(id, payload) values (:headers[fileName], :payload)" channel="outputChannel" jdbc-operations=
<int-jdbc:outbound-channel-adapter query="insert into table_name(id, payload) values (:headers[fileName], :payload)" channel="outputChannel" jdbc-operations="jdbcTemplate">
<int:poller fixed-rate="1000" />
</int-jdbc:outbound-channel-adapter>
在实现步骤2时,如果我同时读取所有条目,我会在列表中得到spring sftp不支持的有效负载。如果将每条记录读取并发送到SFTP,则会出现性能问题。有什么建议吗
<int-jdbc:inbound-channel-adapter row-mapper="rowMapper" query="select * from table_name" channel="sftpChannel" jdbc-operations="jdbcTemplate">
<int:poller fixed-rate="1000" />
</int-jdbc:inbound-channel-adapter>
文件发送成功后如何删除记录?。我猜payload.delete在这里不起作用
<sftp:outbound-channel-adapter auto-startup="true" id="sftpOutboundAdapter" session-factory="sftpSessionFactory" channel="sftpChannel" charset="UTF-8" remote-directory="${spectrum.ftp.path}" remote-filename-generator-expression="headers[fileName] + '.xml'">
<sftp:request-handler-advice-chain>
<bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
<property name="onSuccessExpression" value="payload.delete()" />
</bean>
</sftp:request-handler-advice-chain>
</sftp:outbound-channel-adapter>
为什么不直接发送到SFTP?如果您确实想要单个文件,您可以在读取内容后使用拆分器,将列表转换为单个项目。@M.Deinum:直接发送到SFTP已经就绪。要有故障转移机制,我们必须将这些文件保存到数据库中,并将其发送到SFTP。我会试试斯普利特。谢谢。不用在数据库中进行中间插入,您可以更轻松地使用持久性消息存储,然后自己尝试。另外,您想要的故障转移是什么,当使用JMS时,您可以使用JMS队列来实现故障转移。如前所述,您可以使用持久性messagestore来实现故障转移,您可以将其附加到队列/通道。