我正在尝试使用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&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'。
1条答案
按热度按时间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>>
类型的正文,其中包含查询结果,行数存储到CamelSqlRowCount
header。对于更新操作,返回空正文,受影响的行数存储到CamelSqlUpdateCount
header。对于循环,您可以尝试将主体设置为值
CamelSqlUpdateCount
:或者,如果您使用直接消费者端点,则可以完全删除循环并使用递归,方法是在末尾再次调用路由,直到
CamelSqlUpdateCount
为零。