Camel do while循环

amrnrhlw  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(202)

我正在尝试使用camel dowhile循环。
我有两张表(例如:A、B)的数据库。
例如,目标是插入到从A到B表的500行数据中。(该表太大,无法一次使用insert into)
在这里,我希望循环继续,直到insert into语句返回“0行”。

<loop doWhile="true">   
                <!-- Stock last id of table B -->
                <to uri="sql:{{export.table.b.last.fetched.id.query}}?dataSource=testDataSource&amp;outputType=SelectOne" />                     
                <setHeader headerName="last_fetched_id"> 
                    <simple>${body}</simple>                             
                </setHeader>
            <!-- Insert into query by using the last id limit 500 lines -->
            <to uri="sql:{{export.table.a.insert.fetch.query}}?dataSource=testDataSource" /> 
            <simple>${body} != 0</simple>                    
        </loop>

我不知道我在代码中做错了什么。我有这个错误:
导致的错误:CVC-complex-类型3.2.2:属性'doWhile'不允许出现在项目'loop'。

23c0lvtd

23c0lvtd1#

看起来像是xml-validation错误。您可以仔细检查是否已在<from>标记之后的<route></route>标记内正确定义循环。xml-validation会根据xml-document中定义的结构描述(.xsd)测试xml。
此外,<simple>${body} != 0</simple>应该位于<loop doWhile="true">标签之后,如文件中所示。

XML DSL -文档:

对于sql查询,选择操作返回List<Map<String, Object>>类型的正文,其中包含查询结果,行数存储到CamelSqlRowCountheader。对于更新操作,返回空正文,受影响的行数存储到CamelSqlUpdateCountheader

  • 查询结果
  • 标题

对于循环,您可以尝试将主体设置为值CamelSqlUpdateCount

<setBody>
    <header>CamelSqlUpdateCount</header>
</setBody>

或者,如果您使用直接消费者端点,则可以完全删除循环并使用递归,方法是在末尾再次调用路由,直到CamelSqlUpdateCount为零。

相关问题