2

チャネル アダプタを次のように定義しました。

<int:channel id="target">
    <int:queue /> 
</int:channel>
<int-jdbc:inbound-channel-adapter id="adapter" channel="target" query="${int.poll.query}" update="${int.update.query}" data-source="mock-datasource">
    <int:poller fixed-rate="5000"/>
</int-jdbc:inbound-channel-adapter>

次のように、実行時にポーリング レートを変更できないのはなぜでしょうか。

SourcePollingChannelAdapter adapter = applicationContext.getBean("adapter",SourcePollingChannelAdapter.class);
adapter.setTrigger(new PeriodicTrigger(1000));

このソリューションをデバッグすると、アダプターにこの新しいトリガーが接続されていることがわかりますが、ポーリング レートは変更されていません (5 秒ごと)。同様の運で、アダプターの停止()および開始()も試みました。

誰でも私が間違っていることを指摘できますか? ありがとう

4

2 に答える 2

5

[解決済み]

実行時にトリガーを変更できないことは、Spring チームのメンバーによって確認されています。したがって、ポーリング レートを動的に変更する場合 (たとえば、インバウンド メッセージを調整する場合) は、独自のトリガー実装をロールし、インターバル ポーリング用のセッターを追加する必要があります。

構成で行った変更をここに残します。

<int-jdbc:inbound-channel-adapter id="bancsAdapter" channel="target" query="${int.bancs.poll.query}" update="${int.bancs.update.query}" data-source="bancsMockDB">
    <int:poller trigger="dynamicTrigger" />
</int-jdbc:inbound-channel-adapter>

<bean id="dynamicTrigger" class="directlabs.integration.DynamicTrigger">
    <constructor-arg value="5000" />
</bean>

したがって、スロットリングの場合は、次のことだけを行う必要があります。

applicationContext.getBean("dynamicTrigger",DynamicTrigger.class).setPeriod(1000);

DynamicTrigger の実装は、ここにあります。

Spring チーム メンバーからの元のコメントは、ここにあります。

于 2012-02-02T00:19:55.920 に答える