Camel - пакетная вставка camel-sql с использованием useMessageBodyForSql
Я прочитал в документации, что здесь
"Если для пакета установлено значение" истина ", то интерпретация тела входящего сообщения изменяется незначительно - вместо итератора параметров компонент ожидает итератор, содержащий итераторы параметров; размер внешнего итератора определяет размер пакета".
"Начиная с версии 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");
Тело - это карта ключей / значений, соответствующих списку параметров.
Это работает, но не так, как ожидалось.
Каждая строка вставляется одна за другой вместо ожидаемой пакетной вставки. Возможна ли такая комбинация вариантов?
Если это невозможно, каков будет альтернативный способ сделать это?
1 ответ
Когда вы используете sql, он будет запускать несколько операторов вставки один за другим. Попробуйте использовать orm, как mybatis или ibatis.
Даже вы можете создать класс Дао. Вызвать sqlSession и передать все значения карты в orm для вставки в виде пакета.