3

StepExecution イベントの Spring Integration Gateway にメッセージを送信するように Spring Batch リスナーを構成しようとしています。

次のリンクでは、XML を使用してこれを構成する方法について説明します

http://docs.spring.io/spring-batch/trunk/reference/html/springBatchIntegration.html#providing-feedback-with-informational-messages

Spring Integration DSL を使用してこれを設定するにはどうすればよいですか? DSL を使用してサービス インターフェイスを備えたゲートウェイを構成する方法が見つかりませんでした。

現時点では、実際の StepExecutionListener を実装することでこれを回避し、チャネルへのメッセージを取得するために @MessagingGateway (対応する @Gateway メソッドを呼び出す) で注釈が付けられたインターフェイスを呼び出します。次に、このチャネルの統合 DSL フローをセットアップします。

その回避策を回避して、DSL を使用するより簡単な方法はありますか? XML構成を使用できるように、バッチリスナーをゲートウェイに直接接続する方法はありますか?

乾杯、メノ

4

1 に答える 1

1

まず第一に、SI DSL は既存の SI Java および Annotation 構成の単なる拡張であるため、他の Java 構成と一緒に使用できます。もちろんXML@Importも可能です。

DSL にはゲートウェイ構成がありません。これは、そのメソッドを linear と関連付けることができないためIntegrationFlowです。メソッドごとにダウンストリーム フローを提供する必要があります。

したがって、@MessagingGateway先に進む正しい方法は次のとおりです。

@MessagingGateway(name = "notificationExecutionsListener", defaultRequestChannel = "stepExecutionsChannel")
public interface MyStepExecutionListener extends StepExecutionListener {}

反対側からの@MessagingGateway解析と<gateway>タグの解析は、最終的にGatewayProxyFactoryBean定義になります。したがって、新しいクラスを導入したくない場合は、その Bean を宣言するだけです。

@Bean
public GatewayProxyFactoryBean notificationExecutionsListener(MessageChannel stepExecutionsChannel) {
    GatewayProxyFactoryBean gateway = new GatewayProxyFactoryBean(StepExecutionListener.class);
    gateway.setDefaultRequestChannel(stepExecutionsChannel);
    return gateway;
}

最新のマイルストーン 3の後、フローのサポートnested flowsを導入できる可能性があるときに導入するアイデアがあります。Gatewayこのようなもの:

@Bean
public IntegrationFlow gatewayFlow() {
        return IntegrationFlows
               .from(MyGateway.class, g -> 
                                         g.method("save", f -> f.transform(...)
                                                                .filter(...))
                                          .method("delete", f -> f.handle(...)))
               .handle(...)
               .get();                            
}

loosely couplingただし、ネストされたラムダがノイズを増やし、原則を破る可能性がある限り、それが人生を簡素化するかどうかはわかりません。

于 2014-09-11T07:27:12.160 に答える