原生映象支援
從 6.0 版本開始,Spring Integration 應用程式透過 Spring AOT 原生提示支援 GraalVM 編譯為原生映象。對於大多數常見用例,例如帶有 @Bean 方法的端點定義、帶有 lambda 的 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 及其相應的構建工具來開發原生整合應用程式。 |