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であり、実際には必要ないため、expression値は単にであるため、BeanのとしてInteger使用できます。org.springframework.integration.expression.ValueExpressionvalueAtomicReference

この場合、単に表示できますcurrent value to the user:

@Autowired
private AtomicReference<ValueExpression> groupTimeoutExpression;

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

そして、それを現在の値AtomicReferenceに newで使用しValueExpression、最後の値を に設定しAggregatingMessageHandlerます。

アプリケーションの起動時に、 initial に対して同じことを行う必要がありますgroup-timeout。または、 Beanのandvaluegroup-timeout属性にコピーして貼り付けます。<aggregator>AtomicReference

HTH

于 2015-03-17T17:09:30.700 に答える