我正在尝试从数据库获取员工详细信息列表,并使用REST API将其推入外部系统。我可以为上述流程创建路线。
我还想知道已创建和失败记录的数量。所以我通过将属性设置为0来创建一个计数器,然后增加该属性的值。当我尝试增加属性值时,它始终与初始化的值相同。
from("direct:test")
.setBody(constant("select name as name, location as location,mobile as mobile from employee"))
.to("jdbc:testdb")
.process(exchange ->{
// Custom Logic which will convert list of Employee Details
})
.split(body())
.setProperty("successrec", simple("0"))
.setProperty("failurerec", simple("0"))
.doTry()
.setProperty("successrec", simple("${property.successrec++}"))
.to("http://test/upload/employee")
.doCatch((Exception.class)).process( exchange ->{
Integer failureRecords=exchange.getProperty("failurerec",Integer.class);
exchange.setProperty("failurerec", failureRecords++);
});
我什至尝试使用处理器来设置和获取属性值,但这没有用。我有什么办法可以对成功和失败的记录进行反驳。
答案 0 :(得分:1)
属性对于交易所而言是本地的,因此您可能需要使用Route Policy来注入全局计数器。
创建路由策略:
class MyRoutePolicy extends RoutePolicySupport {
private AtomicInteger counter = new AtomicInteger();
@Override
public void onExchangeBegin(Route route, Exchange exchange) {
exchange.setProperty("counter", counter);
}
public int getCounter() {
return counter.get();
}
};
将策略与路由相关联:
MyRoutePolicy policy = new MyRoutePolicy();
from("direct:test")
.routePolicy(policy)
...
这是可能的解决方案之一,但是您也可以根据需要使用全局计数器,该计数器可能更简单。