ネイティブイメージのサポート
バージョン 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 は、フレームワーク内部で使用される以下の型(String、Number、Long、Date、ArrayList、HashMap、Properties、Hashtable、Exception、UUID、GenericMessage、ErrorMessage、MessageHeaders、AdviceMessage、MutableMessage、MutableMessageHeaders、MessageGroupMetadata、MessageHolder、MessageMetadata、MessageHistory、MessageHistory.Entry、DelayHandler.DelayedMessageWrapper)について、ネイティブイメージ設定に直列化のヒントを公開します。ユーザー固有のデータ(主にメッセージペイロードとして存在する)については、上記のゲートウェイプロキシで示したように、RuntimeHintsRegistrar 実装と対応する RuntimeHints.serialization().registerType() API を介して直列化のヒントを手動で公開する必要があります。
| それぞれのビルドツールを使用して、Spring Boot でネイティブ統合アプリケーションを開発することをお勧めします。 |