Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration Spring集成(JDBC-SFTP):读取一条记录,将其发送给SFTP并删除该记录_Spring Integration - Fatal编程技术网

Spring integration Spring集成(JDBC-SFTP):读取一条记录,将其发送给SFTP并删除该记录

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=

我对进入我们系统的每个传入消息都有以下要求

将传入文件转换为XML文件并保存在数据库中 从数据库中读取该文件并将其发送到SFTP 文件发送成功后删除条目。 我已成功实施步骤1:

<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来实现故障转移,您可以将其附加到队列/通道。