Spring-集成 AggregatingMessageHandler.setGroupTimeoutExpression 可见性

Spring-Integration AggregatingMessageHandler.setGroupTimeoutExpression visibility

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

代码如下所示:

@Autowired
AggregatingMessageHandler messageAggregator;

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

问题是:

可能的解决方案:

不确定为什么将其称为错误,但您的要求不标准。

让我们一起想出一些解决办法!

由于您要在运行时更改 group-timeout 而您确实不需要 expression,因为您的值只是 Integer,您可以使用 org.springframework.integration.expression.ValueExpression 作为 AtomicReference bean 的 value

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

@Autowired
private AtomicReference<ValueExpression> groupTimeoutExpression;

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

并使用 AtomicReference 和新的 ValueExpression 作为当前值,并将最后一个设置为 AggregatingMessageHandler

在应用程序启动时,您应该对初始 group-timeout 执行相同的操作。或者只是 copy/paste 你的 value<aggregator>group-timeout 属性和 AtomicReference bean。

HTH