Spring integration 处理不返回任何结果的存储过程的最佳方法

Spring integration 处理不返回任何结果的存储过程的最佳方法,spring-integration,Spring Integration,我在我的项目中使用Spring集成。我有一个存储过程,它插入一行,不返回任何结果。如果我使用int-jdbc:stored-proc-outbound-gateway,那么流将终止,并且不会连接到下一个通道 DEBUG [org.springframework.jdbc.core.JdbcTemplate.doInCallableStatement] CallableStatement.execute() returned 'false' DEBUG [org.springframewor

我在我的项目中使用Spring集成。我有一个存储过程,它插入一行,不返回任何结果。如果我使用int-jdbc:stored-proc-outbound-gateway,那么流将终止,并且不会连接到下一个通道

DEBUG [org.springframework.jdbc.core.JdbcTemplate.doInCallableStatement] CallableStatement.execute() returned 'false'   
DEBUG [org.springframework.jdbc.core.JdbcTemplate.doInCallableStatement] CallableStatement.getUpdateCount() returned 0  
DEBUG [org.springframework.jdbc.core.JdbcTemplate.extractReturnedResults] CallableStatement.getUpdateCount() returned -1
我的要求是,即使存储过程不返回任何结果,也要继续该流。最好的处理方法是什么

更新

在Artem响应之后,我以以下方式配置了存储过程出站通道适配器:

<int:service-activator  ref="msgHandler" method="buildRequestBasedDataSource" input-channel="PQPutUserBAInformation-SPCall2" output-channel="PQPutUserBAInformation-publishSubscribeChannel"/>
    <!-- PQPutUserBAInformation Channel -->

        <int:publish-subscribe-channel id="PQPutUserBAInformation-publishSubscribeChannel"  />

        <int-jdbc:stored-proc-outbound-channel-adapter
                        id="PQPutUserBAInformation-AWD-StoredProcedure2" 
                        channel="PQPutUserBAInformation-publishSubscribeChannel" 
                        data-source="routingDataSource" 
                        stored-procedure-name="ZSPPQINSERTUSERIDBA"
                        ignore-column-meta-data="true"  
                        use-payload-as-parameter-source = "false" >

                        <int-jdbc:sql-parameter-definition name="P_USERID" direction="IN" type="VARCHAR" />

                        <int-jdbc:parameter name="P_USERID" expression="#xpath(payload, '//CurrentUserID')" />
        </int-jdbc:stored-proc-outbound-channel-adapter>

        <!-- Service Activator to build the Message from the Stored Procedure ResultSet -->
    <int:service-activator input-channel="PQPutUserBAInformation-publishSubscribeChannel" ref="msgHandler" method="buildMessageFromExtSysResponse" />       
考虑改用存储过程出站通道适配器

继续此流程之后,您应该考虑使用发布订阅信道作为适配器的输入。并使一个以上的用户继续在流中


实现相同行为的另一种方法是收件人列表路由器。

重复问题。看这里。我问了同样的问题:如果我的存储过程在插入记录时失败,那么我需要错误消息。因此,在这种情况下,您的问题可能对我没有帮助。您是否捕获存储过程中的异常并将其吞下?您应该能够将oracle异常传播回网关,然后使用错误通道。这就是我为我的错误所做的。我明白你的意思。我正在以任何方式处理错误。您能告诉我您是如何配置发布-订阅频道的,以便我大致了解一下吗?我使用的是直接频道。然而,spring集成示例github应该有很多pub-sub的示例。我发现返回更新存储过程操作的布尔值或在本例中表示执行的删除数的整数值也是一个很好的设计。很抱歉,我的响应延迟了。这些天我一直在度假。我已经添加了int-jdbc:stored-proc-outbound-channel-adapter和int:publish-subscribe-channel,但是我得到了一个异常,java.lang.IllegalArgumentException:提供了一个输出通道,但是链中的最后一个处理程序没有实现MessageProducer接口。您没有告诉我们您使用了链。当然,如果要使用出站通道适配器,则必须断开它。出站通道适配器是单向的。没有输出。这是任何出站通道适配器的规则。水流在这里完全停止了。如果您的过程有时返回结果,则在存储过程出站通道适配器中会忽略该结果。您可以在此处找到一些有关存储过程的示例:是!现在好了。通过发布-订阅通道和第二个订阅者执行后的过程也是正确的。请记住,相同的消息将被发送到第二个`,该消息已发送到存储的proc适配器。这就是发布-订阅频道的性质。请参阅EIP手册和Spring集成参考手册中的更多信息。