小编Joh*_*n B的帖子

Camel中LoggingErrorHandler的意外行为

所以,我有一个驼峰上下文,DeadLetterChannel在上下文级别没有重新传递.在上下文中我有一条路线:

from("direct:input")
     .routeId("enrichHeader")
     .setHeader("myHeader").constant("someValue)
     .to("direct:output");
Run Code Online (Sandbox Code Playgroud)

我有一个单元测试,我在其中interceptSendToEndpoint("direct:output")引发异常.

然后在单元测试中我做producerTemplate.sendBody(theBody).

现在,正如上面在异常时配置的那样,消息被发送到死信通道.一切都很好.但是,如果我配置一个loggingErrorHandler我得到奇怪的行为.所以,如果我更新上述路线如下:

from("direct:input")
     .routeId("enrichHeader")

     .errorHandler(
        loggingErrorHandler("com.myco.myproject")
             .level(LoggingLevel.WARN))

     .setHeader("myHeader").constant("someValue)
     .to("direct:output");
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我得到两个意外的行为.首先,异常仍然记录在级别ERROR而不是已配置WARN.其次,异常会传播回producerTemplate.sendBody(theBody)invokation.

一方面,登录ERROR显然是奇怪的.看似奇怪的另一部分是处理程序正在传播异常.我原以为它会把它标记为已处理并完成它.

这是预期的行为吗?似乎LoggingErrorHandler缺乏文档.

java apache-camel

2
推荐指数
1
解决办法
732
查看次数

Map <Pattern,Object>无法找到密钥

我有以下代码:

List<Pattern> patterns = Lists.newArrayList(Pattern.compile("blah"), Pattern.compile("blah2"));
Map<Pattern, String> map = new HashMap<Patter, String>();
map.put(patterns.get(0), "1");
map.put(patterns.get(1), "2");

Assert.assertTrue(map.containsKey(patterns.get(0)));
Run Code Online (Sandbox Code Playgroud)

断言失败了!

为什么会这样?首先,我很惊讶该Pattern课程没有实现equalshashCode基于模式.但即使它没有,也不Object使用内存地址hashCode,equals所以只要我传递相同的Object实例,就应该找到密钥?

编辑:对不起伙计.这是我实际拥有的.忘记transform每次访问完成后都会创建一个新实例.

List<Pattern> patterns = Lists.transform(Lists.newArrayList("blah1", "blah2"), toPattern);
Run Code Online (Sandbox Code Playgroud)

java hashmap hashcode

1
推荐指数
1
解决办法
949
查看次数

使用"@"获取系统属性

我正在开发一个成功使用以下项目来检索系统属性的项目.

<property name="blah" value="@some.system.property@"/>
Run Code Online (Sandbox Code Playgroud)

这看起来可能是使用带有前缀和后缀的自定义属性占位符,@但我在上下文中找不到一个.我搜索了SPEL参考,但没有看到引用的语法.

这是内置于Spring的东西,如果是这样的话,参考是什么?

java spring

1
推荐指数
1
解决办法
94
查看次数

LinkedList中的并发修改异常

我正在寻找一个好方法,建立一个有限的链表.如果链接列表为"full",则将删除第一个元素,并添加新元素.所以我总是拥有"最新"的"极限大小"元素.

这是通过以下方式实现的:

    private int maxSize;

public LimitedLinkedList(int maxSize) {
    this.maxSize = maxSize;
}

@Override
public synchronized boolean add(E object) {
    boolean success = super.add(object);
    while (this.size() >= maxSize) {
        removeFirst();
    }
    return success;
}
Run Code Online (Sandbox Code Playgroud)

现在我有以下问题:我需要计算链表的平均值.这是我随机获取并发修改异常或索引越界异常的时刻.我的平均方法:

public synchronized static double movingAverage(
        LinkedList<AverageObject> valueList) {
    if (valueList.isEmpty()) {
        return 0;
    }
    double sum = 0;

    int m = 0;
    for (int i = 0; i < valueList.size(); i++) {
        AverageObject object= valueList.get(i);
        sum += object.value;
        m++;
    }

    sum = (m != 0) …
Run Code Online (Sandbox Code Playgroud)

java concurrency summary linked-list

0
推荐指数
1
解决办法
2103
查看次数