【问题标题】:Camel - camel-sql batch insert using useMessageBodyForSqlCamel - 使用 useMessageBodyForSql 进行骆驼 SQL 批量插入
【发布时间】:2015-10-27 10:23:17
【问题描述】:

我在文档here 中读到

"如果batch设置为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");

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

这可行,但不如预期。

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

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

【问题讨论】:

    标签: java apache-camel camel-jdbc camel-sql


    【解决方案1】:

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

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

    【讨论】:

    • 我认为这不是真的。 batch=true 确实使用批量插入,没有必要为此使用 mybatis 或 ibatis。问题是 useMessageBodyForSql 和 batch=true 不能很好地协同工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多