1

我在这里的文档中读到

“如果批处理设置为 true,则入站消息正文的解释会略有变化——而不是参数迭代器,组件需要一个包含参数迭代器的迭代器;外部迭代器的大小决定了批量大小。”

“从 Camel 2.16 开始,您可以使用选项 useMessageBodyForSql 允许将消息体用作 SQL 语句,然后必须在带有键 SqlConstants.SQL_PARAMETERS 的标头中提供 SQL 参数。这允许 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");

主体是与参数列表匹配的键/值映射。

这有效,但不如预期。

每一行都被一一插入,而不是预期的批量插入。这种选项组合甚至可能吗?

如果不可能,有什么替代方法可以做到这一点?

4

1 回答 1

0

当您使用 sql 时,它会触发多个插入语句一个接一个地处理。尝试使用 mybatis 或 ibatis 之类的 orm。

甚至你可以创建一个 dao 类。调用 sqlSession 将所有映射值传递给 orm 以作为批处理插入。

于 2015-11-03T20:10:51.753 回答