原生镜像支持
从 6.0 版本开始,Spring Integration 应用程序通过 Spring AOT 原生提示支持编译为原生镜像。对于大多数常见用例,例如使用 @Bean
方法的端点定义、使用 lambda 表达式和 @MessagingGateway
接口扫描(导入)的 Java DSL 配置,框架提供了相应的反射、代理和序列化提示。如果配置在 POJO 方法上使用消息传递注释(@ServiceActivator
、@Splitter
等),或者 POJO 方法与 IntegrationFlowBuilder.handle(Object service, String methodName)
API 一起使用,则它们也必须用 @Reflective
注释标记,因为它们是由框架以反射方式调用的。
原生镜像不支持 XML 配置。 |
如前所述,当 @IntegrationComponentScan
扫描或在 @Import
注释中使用时,带有 @MessagingGateway
注释的服务接口将由框架处理,并将相应的代理提示暴露到 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));
}
}
}
在 AOT 处理阶段不会处理 IntegrationFlow 内容。因此,某些提示(例如上面提到的网关代理的提示)必须由目标应用程序提供。 |
当然,配置只是集成解决方案的一部分。最重要的是通过网络传输数据以及持久存储。这就是序列化在许多用例中派上用场的地方。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 开发原生集成应用程序,并使用其相应的构建工具。 |