如何将参数从camel路由传递给namedQuery?

jyztefdp  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(166)

我有一个在spring-boot上运行camel的应用程序。我想从camel路由中传递一个参数retriesAllowed给namedQuery。
已命名查询:

@NamedQuery(name = "findFailedMessages", query = RawMessageTx.HQL_FIND_FAILED_MESSAGES)
public class RawMessageTx extends BaseEntityWithTransmitStatus implements Serializable {

public static final String HQL_FIND_FAILED_MESSAGES = "SELECT x from RawMessageTx x WHERE x.status = 'FAILED' and x.tryAgain = 1 and x.retriesAttempted <= :retriesAllowed ORDER BY x.created ";

给药途径:

from("seda:retry_poll_failed_messages").routeId("retry_poll_failed_messages")
    .setHeader("retriesAllowed", constant(retriesAllowed)) 
    .toF("jpa:%s?namedQuery=findFailedMessages&maximumResults=%d", RawMessageTx.class.getName(), 
     maxMessagesPerPollAttempt)
       .split(body())
       .to("direct:anotherEndpoint");

我尝试了不同的东西,它不工作,我不能找到一个很好的例子在网上。

gkl3eglg

gkl3eglg1#

这在JPA组件的文档中进行了解释:
parameters:这个键/值Map用于构建查询参数。它应该是泛型类型java.util.Map,其中的键是给定JPA查询的命名参数
这意味着您必须执行以下操作:

to("jpa:...?parameters=#myMap")

其中,“myMap”是Camel注册表中可用的“java.util.Map”类型Bean的名称。
注册此类bean的一种可能方法(其中之一)是Camel Processor(当然是在jpa端点之前调用)

public void process(Exchange exchange) throws Exception {
    Map<String, Object> params = Map.of("status", "demo");
    exchange.getContext().getRegistry().bind("myMap", params); 
}

相关问题