Apache camel Sql组件:使用多行并使用onConsume将它们全部标记为已处理

Apache camel Sql组件:使用多行并使用onConsume将它们全部标记为已处理,apache-camel,camel-sql,Apache Camel,Camel Sql,我将camel sql组件配置为从数据库表读取数据。当我一次读取一行时,“onConsume”参数起作用,但当我尝试使用“maxMessagesPerPoll”一次读取多行时,该参数不起作用。这是我试过的 工作:当我一次读取一行并使用onConsume更新该行时 我的使用者终结点uri如下所示: sql:select * from REPORT where IS_VIOLATED != 'N' and TYPE = 'Provisioning'?consumer.delay=1000&c

我将camel sql组件配置为从数据库表读取数据。当我一次读取一行时,“onConsume”参数起作用,但当我尝试使用“maxMessagesPerPoll”一次读取多行时,该参数不起作用。这是我试过的

工作:当我一次读取一行并使用onConsume更新该行时

我的使用者终结点uri如下所示:

sql:select * from REPORT where IS_VIOLATED != 'N' and TYPE = 'Provisioning'?consumer.delay=1000&consumer.onConsume=update REPORT set IS_VIOLATED = 'N' where REPORT_ID =:#REPORT_ID
sql:select * from REPORT where IS_VIOLATED != 'N' and TYPE = 'Provisioning'?consumer.delay=1000&maxMessagesPerPoll=3&consumer.useIterator=false&consumer.onConsume=update REPORT set IS_VIOLATED = 'N' where REPORT_ID in(:#REPORT_ID)
sql:select * from REPORT where IS_VIOLATED != 'N' and TYPE = 'Provisioning'?consumer.delay=1000&maxMessagesPerPoll=3&consumer.useIterator=false&&processingStrategy=#reportProcessingStratergy&consumer.onConsume=update REPORT set IS_VIOLATED = 'N' where REPORT_ID in(?)
不工作:当我将camel的sql组件配置为读取可配置行时(使用“maxMessagesPerPoll”)。它一次读取多行,但onConsume似乎不起作用。我试图告诉camel使用IN运算符,并使用IN子句的值数组设置头值(REPORT_ID)

我的使用者端点uri现在看起来像:

sql:select * from REPORT where IS_VIOLATED != 'N' and TYPE = 'Provisioning'?consumer.delay=1000&consumer.onConsume=update REPORT set IS_VIOLATED = 'N' where REPORT_ID =:#REPORT_ID
sql:select * from REPORT where IS_VIOLATED != 'N' and TYPE = 'Provisioning'?consumer.delay=1000&maxMessagesPerPoll=3&consumer.useIterator=false&consumer.onConsume=update REPORT set IS_VIOLATED = 'N' where REPORT_ID in(:#REPORT_ID)
sql:select * from REPORT where IS_VIOLATED != 'N' and TYPE = 'Provisioning'?consumer.delay=1000&maxMessagesPerPoll=3&consumer.useIterator=false&&processingStrategy=#reportProcessingStratergy&consumer.onConsume=update REPORT set IS_VIOLATED = 'N' where REPORT_ID in(?)
我可能做错了什么。我已经对此做了足够的搜索,并找到了相关的。但这并没有让我走上正确的道路

我需要能够将所有已消耗的行标记为IS_invalized='N'


感谢您的帮助。

请仔细阅读:

我尝试使用属性“processingStrategy”实现自定义处理策略

}

配置SpringBean:

  <bean class="go.ga.ns.reconc.sl.ReportProcessingStratergy" id="reportProcessingStratergy">

注意:processingStrategy=#ReportProcessingStrategy(#如前所述具有重要意义,它不起作用)

我注意到您设置了
consumer.useIterator=false
,文档上说:

如果为true,则将单独处理轮询时返回的每一行。如果为false,则将整个java.util.List数据设置为IN body

因此我认为,由于这个选项,不再理解
:#REPORT_ID
,因为它将来自整个列表,而不是每一行

也许删除这个选项已经足够了

我也不明白为什么您将where子句从
where REPORT\u ID=:#REPORT\u ID
更改为
where REPORT\u ID in(:#REPORT\u ID)