<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,它假设大部分为空或者视情况而定为某些错误消息。 有什么想法可能来自这个奇怪的价值或如何走到这个底部?
答案 0 :(得分:1)
这肯定来自Oracle。
您的代码看起来不错,payload.toString()
完全符合预期的Map
样式。你真的有error
作为OUT
参数。
所以,我不知道为什么你确信Java是有罪的。
您可以为org.springframework.integration
和/或org.springframework.jdbc
类别打开DEBUG登录级别,以扫描有关奇怪行为的日志。