ネイティブイメージのサポート

バージョン 6.0 以降、Spring Integration アプリケーションのネイティブイメージへの GraalVM コンパイルは、Spring AOT ネイティブヒントによってサポートされます。@Bean メソッドを使用したエンドポイント定義、ラムダを使用した Java DSL 構成、および @MessagingGateway インターフェーススキャン (インポート) などの最も一般的なユースケースに対して、フレームワークはそれぞれのリフレクション、プロキシ、シリアライゼーションのヒントを提供します。設定で POJO メソッドのメッセージングアノテーション (@ServiceActivator@Splitter など) を使用する場合、または POJO メソッドが IntegrationFlowBuilder.handle(Object service, String methodName) API で使用される場合、フレームワークによって反射的に呼び出されるため、@Reflective アノテーションでマークする必要もあります。

XML 構成は、ネイティブイメージではサポートされていません。

前述のように、@MessagingGateway アノテーションを持つサービスインターフェースは、@IntegrationComponentScan によってスキャンされるか、@Import アノテーションで使用されると、フレームワークによって処理され、それぞれのプロキシヒントが AOT コントリビューションに公開されます。ゲートウェイが IntegrationFlow.from(Class<?> serviceInterface) API を使用して宣言されている場合、そのようなインターフェース用に構成されたプロキシを手動で公開する必要があります。

@Configuration
@EnableIntegration
@ImportRuntimeHints(GatewayRuntimeHints.class)
public class IntegrationConfiguration {

    @Bean
    IntegrationFlow someFlow() {
        return IntegrationFlow.from(SomeGateway)
                  // ...
                   .get();
    }

    public interface SomeGateway {

        void doSomething(Object payload);

    }

    private static class GatewayRuntimeHints implements RuntimeHintsRegistrar {

        @Override
        public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
            hints.proxies().registerJdkProxy(
                                   AopProxyUtils.completeJdkProxyInterfaces(SomeGateway));
        }

    }

}
IntegrationFlow コンテンツは、AOT 処理フェーズでは処理されません。上記のゲートウェイプロキシのヒントなど、いくつかのヒントをターゲットアプリケーションで提供する必要があります。

もちろん、構成は統合ソリューションの一部にすぎません。最も重要な部分は、ネットワークを介したデータ転送と永続ストレージです。そこで、多くのユースケースでシリアライゼーションが役立ちます。Spring Integration は、直列化のヒントを、フレームワークによって内部的に使用されるこれらの型のネイティブイメージ構成に公開します: StringNumberLongDateArrayListHashMapPropertiesHashtableExceptionUUIDGenericMessageErrorMessageMessageHeadersAdviceMessageMutableMessageMutableMessageHeadersMessageGroupMetadataMessageHolderMessageMetadataMessageHistoryMessageHistory.EntryDelayHandler.DelayedMessageWrapper。ほとんどがメッセージペイロードとして存在するユーザー固有のデータの場合、シリアライゼーションヒントは、上記のゲートウェイプロキシとそれぞれの RuntimeHints.serialization().registerType() API で示したように、RuntimeHintsRegistrar 実装を介して手動で公開する必要があります。

それぞれのビルドツールを使用して、Spring Boot でネイティブ統合アプリケーションを開発することをお勧めします。