После использования Spring Integration в проекте я заметил, что адаптер или шлюз 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>
Пожалуйста, поправьте меня, если есть недостатки в понимании концепции.