gpt4 book ai didi

spring - 如何使用 Spring Integration DSL 配置 StepExecutionListener

转载 作者:行者123 更新时间:2023-12-04 18:06:20 24 4
gpt4 key购买 nike

我正在尝试配置 Spring Batch 监听器以将消息发送到 Spring Integration Gateway 以获取 StepExecution 事件。

以下链接解释了如何使用 XML 进行配置

http://docs.spring.io/spring-batch/trunk/reference/html/springBatchIntegration.html#providing-feedback-with-informational-messages

如何使用 Spring Integration DSL 进行设置?我发现无法使用 DSL 配置具有服务接口(interface)的网关。

目前我通过实现一个实际的 StepExecutionListener 来解决这个问题,然后调用一个用 @MessagingGateway 注释的接口(interface)(调用相应的 @Gateway 方法)以便将消息发送到 channel 。然后我为这个 channel 设置了一个集成 DSL 流程。

是否有更简单的使用 DSL 的方法来避免这种变通方法?是否有某种方法可以将 Batch 监听器直接连接到网关,就像使用 XML 配置一样?

干杯,门诺

最佳答案

首先,SI DSL 只是对现有 SI Java 和 Annotation 配置的扩展,因此它可以与任何其他 Java 配置一起使用。当然是 XML @Import也是可以的。

DSL中没有网关配置,因为它的方法不能与线性IntegrationFlow连接.需要为每个方法提供下游流程。

所以,@MessagingGateway是继续前进的正确方法:

@MessagingGateway(name = "notificationExecutionsListener", defaultRequestChannel = "stepExecutionsChannel")
public interface MyStepExecutionListener extends StepExecutionListener {}

从另一边@MessagingGateway解析以及 <gateway>标签解析以 GatewayProxyFactoryBean 结尾定义。所以,如果你不想引入一个新类,你可以声明那个 bean:

@Bean
public GatewayProxyFactoryBean notificationExecutionsListener(MessageChannel stepExecutionsChannel) {
GatewayProxyFactoryBean gateway = new GatewayProxyFactoryBean(StepExecutionListener.class);
gateway.setDefaultRequestChannel(stepExecutionsChannel);
return gateway;
}

最新Milestone 3之后我有个想法介绍nested flows , 什么时候可以介绍Gateway支持流量。像这样:

@Bean
public IntegrationFlow gatewayFlow() {
return IntegrationFlows
.from(MyGateway.class, g ->
g.method("save", f -> f.transform(...)
.filter(...))
.method("delete", f -> f.handle(...)))
.handle(...)
.get();
}

但是我不确定它是否会简化生活,因为任何嵌套的 Lambda 只会增加更多噪音并可能破坏 loosely coupling原则。

关于spring - 如何使用 Spring Integration DSL 配置 StepExecutionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25776800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com