Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在驼峰路径中实现计数器变量_Java_Spring_Apache Camel_Dsl_Spring Camel - Fatal编程技术网

Java 在驼峰路径中实现计数器变量

Java 在驼峰路径中实现计数器变量,java,spring,apache-camel,dsl,spring-camel,Java,Spring,Apache Camel,Dsl,Spring Camel,我试图从数据库中获取员工详细信息列表,并使用RESTAPI将其推送到外部系统。我能够为上述流程创建一条路线 另外,我想知道创建记录和失败记录的计数。因此,我创建了一个计数器,将属性值设置为0,然后增加属性值。当我尝试增加属性值时,它总是与我初始化的相同 from("direct:test") .setBody(constant("select name as name, location as location,mobile as mobile from

我试图从数据库中获取员工详细信息列表,并使用RESTAPI将其推送到外部系统。我能够为上述流程创建一条路线

另外,我想知道创建记录和失败记录的计数。因此,我创建了一个计数器,将属性值设置为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++);

     });

我甚至尝试使用processor来设置和获取属性值,但没有成功。是否有任何方法可以让计数器覆盖成功和失败记录。

属性是exchange的本地属性,因此您可能需要使用插入全局计数器

创建路由策略:

类MyRoutePolicy扩展了RoutePolicySupport{
私有AtomicInteger计数器=新的AtomicInteger();
@凌驾
public void OneExchange开始(路由、Exchange){
exchange.setProperty(“计数器”,计数器);
}
公共int getCounter(){
返回计数器get();
}
};
将策略与路由关联:

MyRoutePolicy策略=新建MyRoutePolicy();
来自(“直接:测试”)
.路线政策(政策)
...

这是一种可能的解决方案,但您也可以使用一个全局计数器,根据您的需要,它可能更简单。

感谢您提供的信息,无法在文档中找到任何相关信息。你能给我举个例子吗?这可能会有帮助,谢谢,我是骆驼队的新手,我无法用上面的方法来理解它。另外,计数器中还有一个全局参数部分。所以我使用了ThreadLocal,它工作得很好…添加了一个示例在创建交换时调用策略,所以是thread saafe