Apache camel Sql组件:使用多行并使用onConsume将它们全部标记为已处理
我将camel sql组件配置为从数据库表读取数据。当我一次读取一行时,“onConsume”参数起作用,但当我尝试使用“maxMessagesPerPoll”一次读取多行时,该参数不起作用。这是我试过的 工作:当我一次读取一行并使用onConsume更新该行时 我的使用者终结点uri如下所示: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
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)