Apache camel 阿帕奇骆驼&x27;s sql使用者:如何将参数传递给查询?

Apache camel 阿帕奇骆驼&x27;s sql使用者:如何将参数传递给查询?,apache-camel,Apache Camel,假设我有一条路线: <route> <from uri="sql:select orderid from Orders where date = '20140606'"/> <split> <simple>${body}</simple> <process ref="orderProcessor"/> </split> </route> 这意味着每天当我开始申请时,日期都会自动改变 令我惊讶的是,我

假设我有一条路线:

<route>
<from uri="sql:select orderid from Orders where date = '20140606'"/>
<split>
<simple>${body}</simple>
<process ref="orderProcessor"/>
</split>
</route>
这意味着每天当我开始申请时,日期都会自动改变

令我惊讶的是,我发现当“sql”端点用作使用者时,它是不可能的。如果sql用作生产者,而不是使用者,我可以将参数作为标头传递。还是我错了,这是可能的

顺便说一句,我更喜欢使用“sql”作为使用者,因为它方便地允许对使用选项“consumer.onConsume”检索的每一行执行和更新查询(请参阅:)

消费者端点(
from
)是静态的,这就是为什么
${date:now:yyyyMMdd}
不起作用的原因

使用Java DSL,在这里您拥有所有的灵活性:

String today = new SimpleDateFormat("yyyyMMdd").format(new Date());
from("sql:select orderid from Orders where date = '" + today + '")
    .split(...);
或使用生产者终结点(
):


${日期:现在:yyyyMMdd}
${body}
编辑: 或者,您可以使用DB特定的日期函数。使用Oracle DB,这将类似于:

<from uri="sql:select orderid from Orders where date = to_date(to_char(current_date),'dd-mon-yy')" />

消费者端点(中的
是静态的,这就是为什么
${date:now:yyyyMMdd}
不起作用的原因

使用Java DSL,在这里您拥有所有的灵活性:

String today = new SimpleDateFormat("yyyyMMdd").format(new Date());
from("sql:select orderid from Orders where date = '" + today + '")
    .split(...);
或使用生产者终结点(
):


${日期:现在:yyyyMMdd}
${body}
编辑: 或者,您可以使用DB特定的日期函数。使用Oracle DB,这将类似于:

<from uri="sql:select orderid from Orders where date = to_date(to_char(current_date),'dd-mon-yy')" />


所以您不希望它是动态的,只在应用程序启动时设置?所以您不希望它是动态的,只在应用程序启动时设置?是的,我使用的是第二种解决方案。我只是想如果那是唯一的解决办法。我更喜欢使用sql asconsumer和xml dsl。@kachanov将我的Oracle DB示例视为附加选项。是的,我正在使用第二种解决方案。我只是想如果那是唯一的解决办法。我更喜欢使用sql asconsumer和xml dsl。@kachanov将我的Oracle DB示例视为附加选项。