Imr*_*han 1 java jpa apache-camel
我正在从表中检索多行,然后希望我的处理器处理它们,但我观察到camel正在为每一行调用我的处理器,我想传递实体列表
以下是我的代码
from("jpa:com.pns.ab.model.LoanRequest?consumeDelete=false"
+ "&consumer.delay=20000"
+ "&consumer.namedQuery=selectLoanRequests"
+ "&persistenceUnit=LoanServicePU").process(new JpaProcessor());
Run Code Online (Sandbox Code Playgroud)
在处理器中
LoanRequest lr = exchange.getIn().getBody(LoanRequest.class);
Run Code Online (Sandbox Code Playgroud)
但我想要的选择
List<LoanRequest> requests = exchange....
Run Code Online (Sandbox Code Playgroud)
问候,
使用聚合器:
private static class JpaAggregationRouteBuilder extends RouteBuilder {
@Override
public void configure() {
from("jpa:com.pns.ab.model.LoanRequest?consumeDelete=false"
+ "&consumer.delay=20000"
+ "&consumer.namedQuery=selectLoanRequests"
+ "&persistenceUnit=LoanServicePU")
.aggregate(constant(true), new ArrayListAggregationStrategy())
.completionFromBatchConsumer()
.process(new JpaProcessor());
}
}
// Simply combines Exchange body values into an ArrayList<Object>
// Taken from http://camel.apache.org/aggregator2
private static class ArrayListAggregationStrategy implements AggregationStrategy {
@SuppressWarnings("unchecked")
@Override
public Exchange aggregate(final Exchange oldExchange, final Exchange newExchange) {
final Object newBody = newExchange.getIn().getBody();
ArrayList<Object> list = null;
if (oldExchange == null) {
list = new ArrayList<Object>();
if (newBody != null) {
list.add(newBody);
}
newExchange.getIn().setBody(list);
return newExchange;
} else {
list = oldExchange.getIn().getBody(ArrayList.class);
if (newBody != null) {
list.add(newBody);
}
return oldExchange;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关聚合器的更多信息可以在Camel网页上找到.
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |