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

バージョン 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)について、ネイティブイメージ設定に直列化のヒントを公開します。ユーザー固有のデータ(主にメッセージペイロードとして存在する)については、上記のゲートウェイプロキシで示したように、RuntimeHintsRegistrar 実装と対応する RuntimeHints.serialization().registerType() API を介して直列化のヒントを手動で公開する必要があります。

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