在一个项目中使用Spring集成之后,我的观察是仅在流的开始或结束使用JDBC适配器或网关。 如果我们在流动中使用他们,那么就会显得过于冗长和复杂。
例如:
<jdbc:outbound-gateway
query="select * from foo where
c1=:headers[c1] AND
c2=:headers[c2] AND
c3=:headers[c3] AND
c4=:headers[c4]"
row-mapper="fooMapper" data-source="myDataSource" max-rows-per-poll="100000" />
<int:service-activator ref="serviceActivator" method="processFoo" />
另外,在上述<jdbc:outbound-gateway>
,我们需要通过所有的占位符(C1,C2,C3,C4)中的消息的头部中。 我们需要看来回在Java代码和XML文件中,当有太多的WHERE子句WHERE条件或任何变化。
它也容易出错。 举例来说,如果我们拼写错误:headers[c1]
到:headers[d1]
那么就不会引发任何异常并替换:headers[d1]
与null
。
如果查询不返回任何行则默认情况下将引发异常。 所以,我们必须使用requires-reply="false"
来改变默认行为。
如果我们想继续当查询不返回任何值,那么我们就必须添加通知网关,如下图所示:
<jdbc:outbound-gateway ... >
<jdbc:request-handler-advice-chain>
<bean class="com.service.NullReplyAdvice" />
</jdbc:request-handler-advice-chain>
</jdbc:outbound-gateway>
请纠正我,如果有在概念的理解缺陷。