2017-02-20 35 views
1

Я вызываю процедуру, которая возвращает разные данные в наборе результатов на основе типа запроса. Для этой цели я использую хранимый-proc-исходящий-шлюз. Тип запроса передается процедуре, но внутри картографа он недоступен.Весна интеграция return-resultset на основе полезной нагрузки

Я мог бы использовать ColumnMetaData для обработки resultSet, но я бы предпочел иметь конкретные типы запросов. Другое решение - иметь столько же шлюзов, сколько и типов запросов, но, возможно, есть что-то лучше.

Могу ли я указать, какой картограф использовать на основе полезной нагрузки, в хранимых-proc-outbound-gateway?

ответ

0

Ну, если честно, если бы я был вами, я бы сделал отдельные компоненты для определенных типов. В будущем логика может быть более сложной, и было бы легче изменить определенную функцию, чем пытаться выяснить, как придумать все эти if..else.

Тем не менее ваш запрос отличается ...

Как вы видите, есть только один возможный крюк для вас там - RowMapper инъекции для конкретных процедуры паров.

Я могу предложить решение, подобное RoutingRowMapper, которое будет консультироваться с переменной ThreadLocal, чтобы выбрать нужный RowMapper делегату.

Идея взята с AbstractRoutingDataSource. Также есть что-то вроде SimpleRoutingConnectionFactory весной AMQP.

ThreadLocal вы можете заполнить до stored-proc-outbound-gateway, и это действительно может быть вашим желаемым типом.

Другой трюк может быть основан на результате процедуры, в которой ResultSet содержит столбец с подсказкой, на которую нацеливается RowMapper.

В любом случае ваша задача может быть достигнута только с помощью композита RowMapper. stored-proc-outbound-gateway не имеет никакой логики для решения и не будет. Это просто не его ответственность.

+0

Благодарим за разъяснения. Я сделал отдельные процессоры типа запросов. Я согласен, это решение гораздо более чистое, что принимает решение внутри RowMapper. – Ving