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);
}
问题是:
- 我想向用户显示当前值,但是...
- getter is protected.
可能的解决方案:
- 我应该在这个 bean 上注入一个表达式然后改变它的值吗?
- 也就是说,它会在下次构建消息组时用新结果重新计算表达式吗?
- 我是否应该使用我自己的具有 public setter 的处理程序来扩展 AggregatingMessageHandler?
- 或者这是一个错误,应该在下一个版本中修复?
不确定为什么将其称为错误,但您的要求不标准。
让我们一起想出一些解决办法!
由于您要在运行时更改 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
我的业务逻辑需要能够更改聚合器上配置的组超时。
代码如下所示:
@Autowired
AggregatingMessageHandler messageAggregator;
public void setTimeout(Integer timeoutValue) {
Expression timeoutExpression = new SpelExpressionParser().parseExpression(timeoutValue.toString());
messageAggregator.setGroupTimeoutExpression(timeoutExpression);
}
问题是:
- 我想向用户显示当前值,但是...
- getter is protected.
可能的解决方案:
- 我应该在这个 bean 上注入一个表达式然后改变它的值吗?
- 也就是说,它会在下次构建消息组时用新结果重新计算表达式吗?
- 我是否应该使用我自己的具有 public setter 的处理程序来扩展 AggregatingMessageHandler?
- 或者这是一个错误,应该在下一个版本中修复?
不确定为什么将其称为错误,但您的要求不标准。
让我们一起想出一些解决办法!
由于您要在运行时更改 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