java - 在骆驼路线中实现计数器变量
问题描述
我正在尝试从数据库中获取员工详细信息列表并使用 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++);
});
我什至尝试使用处理器来设置和获取属性值,但它没有奏效。有什么办法可以让我对成功和失败记录进行计数器。
解决方案
属性是交换的本地属性,因此您可能需要使用路由策略来注入全局计数器。
创建路由策略:
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)
...
这是可能的解决方案之一,但您也可以使用全局计数器,这取决于您的需要,可能更简单。
推荐阅读
- c# - 在数据库查询中使用 .Include() 会创建无限循环的数据
- amazon-web-services - EC2 弹性 IP 自动伸缩
- php - 嵌套的 foreach 循环意外结果
- c# - 有多个键时将 JSON 映射到 C# 类
- debugging - simple-pt 中的 spdecode 响应“错误跟踪流与查询不匹配”英特尔处理器跟踪
- html - 结合弹性和绝对定位时的困惑
- function - 带有循环的函数以包含重要代码
- dictionary - 进行基于字典的文本分类时如何创建字典?价值观是如何确定的?
- python - 如何使用外部变量中断和停止正在运行的进程
- excel - 在 Excel 中满足条件的 VLOOKUP 函数的总和