Java Camel recipientList未迭代所有收件人

Java Camel recipientList未迭代所有收件人,java,apache-camel,Java,Apache Camel,我正在编写一个Camel集成,它可以使用任意数量的查询并针对任意数量的数据库执行这些查询 路由首先获取文件夹中的所有查询,然后使用拆分器按顺序对其进行迭代: from("quartz2:quartzInitializer?cron={{sync.cron}}") .routeId("quartzInitializer") .bean(QueryHandler.class, "getQueries") .split(exchangeProperty(QueryHandler

我正在编写一个Camel集成,它可以使用任意数量的查询并针对任意数量的数据库执行这些查询

路由首先获取文件夹中的所有查询,然后使用拆分器按顺序对其进行迭代:

from("quartz2:quartzInitializer?cron={{sync.cron}}")
    .routeId("quartzInitializer")
    .bean(QueryHandler.class, "getQueries")
    .split(exchangeProperty(QueryHandler.Properties.QUERIES))
        .setProperty(Properties.CURRENT_QUERY, simple("body"))
        .to("direct:executeSingleQuery")
    .end();
在上面的代码段中,属性
QueryHandler.Properties.querys
包含两个查询文件位置:

config/sql/1__select_stat_machine.sql
config/sql/2__select_stat_session.sql
接下来,我发送迭代查询的位置并从中构造收件人列表:

from("direct:executeSingleQuery")
    .routeId("executeSingleQuery")
    .bean(DataSourceHandler.class, "createEndpointsWithQuery")
    .recipientList(exchangeProperty(DataSourceHandler.Properties.QUERY_RECIPIENTS))
        .parallelProcessing()
    .log(LoggingLevel.INFO, String.format("Calling ${in.header.%s}", Exchange.RECIPIENT_LIST_ENDPOINT));
在上面的代码段中,参数
DataSourceHandler.Properties.QUERY\u RECIPIENTS
包含两个收件人:

sql:file:config/sql/1__select_stat_machine.sql?dataSource=datasource3&outputHeader=resultset
sql:file:config/sql/1__select_stat_machine.sql?dataSource=datasource2&outputHeader=resultset
但是,当我运行此操作时,只调用其中一个收件人,在本例中仅调用
数据源2
,该数据源位于传递给recipientList的列表中的索引1处:

Calling sql://file:config/sql/1__select_stat_machine.sql?dataSource=datasource2&outputHeader=resultset
Calling sql://file:config/sql/2__select_stat_session.sql?dataSource=datasource2&outputHeader=resultset
我一辈子都搞不清楚我做错了什么。我是否在某处缺少一个
end()
?是我的拆分器出了问题,还是我的收件人列表出了问题

.recipientList(exchangeProperty(...))
   .log(LoggingLevel.INFO, String.format("Calling ${in.header.%s}", Exchange.RECIPIENT_LIST_ENDPOINT));
您的日志语句放错了位置。 基本上,您对路线进行建模的方式是: “请将邮件发送给所有收件人,然后打印邮件”。事实上,在遍历收件人列表之后,Camel变量保存最后一个收件人的URI

在Spring DSL中更为明显:

您的骆驼路线正在做什么:

<recipientList>
  <header>...</header> 
</recipientList>
<log message="Done"/>
<recipientList>
  <header>...</header>
  <log message="Done"/>  
</recipientList>

... 
与您认为Camel在做的事情相比:

<recipientList>
  <header>...</header> 
</recipientList>
<log message="Done"/>
<recipientList>
  <header>...</header>
  <log message="Done"/>  
</recipientList>

...

这很有道理,我回去工作后会测试一下。同时,非常感谢!