ネイティブイメージのサポート
バージョン 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
。ほとんどがメッセージペイロードとして存在するユーザー固有のデータの場合、シリアライゼーションヒントは、上記のゲートウェイプロキシとそれぞれの RuntimeHints.serialization().registerType()
API で示したように、RuntimeHintsRegistrar
実装を介して手動で公開する必要があります。
それぞれのビルドツールを使用して、Spring Boot でネイティブ統合アプリケーションを開発することをお勧めします。 |