执行存储过程后有时会返回奇怪的值

时间:2016-03-15 21:25:54

标签: stored-procedures spring-integration spring-jdbc

<int-jdbc:stored-proc-outbound-gateway 
            data-source="myDataSource"
            request-channel="reqChannel" 
            reply-channel="resultChannel"
            stored-procedure-name="updateProcessStatus"
            ignore-column-meta-data="true">             
            <int-jdbc:sql-parameter-definition name="id" direction="IN"/>
            <int-jdbc:sql-parameter-definition name="status" direction="IN" type="NVARCHAR"/>
            <int-jdbc:sql-parameter-definition name="error" direction="OUT" type="NVARCHAR"/>
            <int-jdbc:parameter name="id" expression="payload.id"/>                 
            <int-jdbc:parameter name="status" expression="payload.status"/>                                                         
</int-jdbc:stored-proc-outbound-gateway>

 <int:logging-channel-adapter id="resultChannel" expression="'result receive is '+ payload " />

上面的代码在高并发环境中运行,它似乎工作正常,但有时它开始记录从执行存储过程返回相当奇怪的有效负载。例如'收到的结果是{error = D}', Oracle SP未编码为返回值D,它假设大部分为空或者视情况而定为某些错误消息。 有什么想法可能来自这个奇怪的价值或如何走到这个底部?

1 个答案:

答案 0 :(得分:1)

这肯定来自Oracle。

您的代码看起来不错,payload.toString()完全符合预期的Map样式。你真的有error作为OUT参数。

所以,我不知道为什么你确信Java是有罪的。

您可以为org.springframework.integration和/或org.springframework.jdbc类别打开DEBUG登录级别,以扫描有关奇怪行为的日志。