我的要求是每隔几分钟轮询一次数据库并获取一个sql。因此我的代码是
<camel:route>
<camel:from uri="timer:dataRetrieve?period=5s"/>
<camel:to uri="sql:select output_obj,create_dt,destination_type from dbo.gcas_events_test where process_sw = 'N' order by create_dt desc" />
</camel:route>
我期待我的数据集中有3个字段。我想看看destination_type ='SEC'是否必须转到不同的路线。
所以我想出来了。
<camel:route>
<camel:from uri="timer:dataRetrieve?period=5s"/>
<camel:to uri="sql:select output_obj,create_dt,destination_type from dbo.gcas_events_test where process_sw = 'N' order by create_dt desc" />
<camel:choice>
<camel:when>
<simple>${body.destination_type}='SEC'</simple>
<camel:to uri="foo" />
</camel:when>
</camel:choice>
</camel:route>
它会在简单标记处抛出错误。与ognl也有类似的问题。我在这做错了什么? ${body.destination_type}='SEC'
也会工作吗? (假设我在数据集中有这个值)。
答案 0 :(得分:1)
根据Camel doc,如果配置不同,则select语句的输出为List<Map<String, Object>>
。在您的情况下,可以按如下方式访问结果集中找到的第一个destination_type
:
${body[0][destination_type]}
路线定义应如下(使用==
而不是简单的=
):
<camel:route>
<camel:from uri="timer:dataRetrieve?period=5s"/>
<camel:to uri="sql:select output_obj,create_dt,destination_type from dbo.gcas_events_test where process_sw = 'N' order by create_dt desc" />
<camel:choice>
<camel:when>
<camel:simple>${body[0][destination_type]} == 'SEC'</simple>
<camel:to uri="foo" />
</camel:when>
</camel:choice>
</camel:route>
如果结果集的每条记录都要逐一处理,那么您可以使用splitter:
<camel:route>
<camel:from uri="timer:dataRetrieve?period=5s"/>
<camel:to uri="sql:select output_obj,create_dt,destination_type from dbo.gcas_events_test where process_sw = 'N' order by create_dt desc" />
<camel:split>
<camel:simple>${body}</camel:simple>
<camel:choice>
<camel:when>
<camel:simple>${body[destination_type]} == 'SEC'</simple>
<camel:to uri="foo" />
</camel:when>
</camel:choice>
</camel:split>
</camel:route>