处理存储过程的最佳方法,该方法不会返回任何结果

时间:2017-03-17 10:46:34

标签: spring-integration

我在我的项目中使用Spring Integration。我有一个存储过程,它插入一行并且不会返回任何结果。如果我使用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" />       

1 个答案:

答案 0 :(得分:1)

请考虑使用stored-proc-outbound-channel-adapter

要继续流程,您应该考虑使用publish-subscribe-channel作为该适配器的输入。并让另外一个订阅者继续在流中。

实现相同行为的另一种方法是recipient-list-router