本机镜像支持
从 6.0 版本开始,Spring Integration 应用程序的 GraalVM 编译到本机镜像由 Spring AOT 本机提示支持。
对于大多数常见用例,例如使用 @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));
}
}
}
|
当然,配置只是集成解决方案的一部分。
最重要的部分是网络数据传输以及持久存储。
这就是序列化在许多用例中派上用场的地方。
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 及其相应的构建工具开发本机集成应用程序。 |