Я прочитал в документации here чтоВерблюд - верблюд-SQL пакетной вставки с помощью useMessageBodyForSql
«Если партия установлена верно, то интерпретация въездного тела сообщения изменяется незначительно - вместо итератора параметров, в компонент ожидает итератор, содержащий итераторы параметров, размер внешнего итератора определяет размер партии. "
«Начиная с версии Camel 2.16 вы можете использовать опцию useMessageBodyForSql, которая позволяет использовать тело сообщения в качестве оператора SQL, а затем параметры SQL должны быть предоставлены в заголовке с ключом SqlConstants.SQL_PARAMETERS. Это позволяет компоненту SQL чтобы работать более динамично, поскольку SQL-запрос из тела сообщения ».
У меня есть следующий маршрут:
from("direct:processLine")
.setHeader(SqlConstants.SQL_PARAMETERS, simple("${body}"))
.setBody(constant("INSERT INTO SOME_TABLE "
" (Param1, Param2) " +
" values " +
" (:?Param1,:?Param2)"))
.to("sql://query?useMessageBodyForSql=true&batch=true&dataSource=dataSource");
Тело является отображением ключевых/значений, соответствующих список параметров.
Это работает, но не так, как ожидалось.
Каждая строка вставлена одна за другой, а не ожидаемая вставка партии. Возможно ли это сочетание вариантов?
Если это невозможно, каков был бы альтернативный способ достижения этого?
Я не думаю, что это правда. batch = true использует пакетные вставки, для этого не нужно использовать mybatis или ibatis. Проблема в том, что useMessageBodyForSql и batch = true работают плохо. – DKIT