1

我的业务逻辑需要能够更改聚合器上配置的组超时。

代码如下所示:

@Autowired
AggregatingMessageHandler messageAggregator;

public void setTimeout(Integer timeoutValue) {
    Expression timeoutExpression = new SpelExpressionParser().parseExpression(timeoutValue.toString());
    messageAggregator.setGroupTimeoutExpression(timeoutExpression);
}

问题是:

可能的解决方案:

  • 我应该在这个bean上注入一个表达式然后改变它的值吗?
    • 意思是,它会在下次构建消息组时用新结果重新评估表达式?
  • 我应该使用我自己的具有公共设置器的处理程序来扩展 AggregatingMessageHandler 吗?
  • 或者这是一个错误,应该在下一个版本中修复?
4

1 回答 1

0

不知道为什么将其称为错误,但您的要求不是标准的。

让我们一起尝试想出一些解决方案!

由于您将group-timeout在运行时更改并且您真的不需要 a ,因为expression您的值只是Integer,您可以将org.springframework.integration.expression.ValueExpression其用作bean。valueAtomicReference

在这种情况下,您可以简单地显示current value to the user

@Autowired
private AtomicReference<ValueExpression> groupTimeoutExpression;

....
   this.groupTimeoutExpression.get().getValue();

并将其AtomicReference与新ValueExpression的当前值一起使用,并将最后一个设置为AggregatingMessageHandler.

在应用程序启动时,您应该对 initial 执行相同的操作group-timeout。或者只是复制/粘贴value到bean的andgroup-timeout属性。<aggregator>AtomicReference

高温高压

于 2015-03-17T17:09:30.700 回答