java - 捕获 Spring Integration DSL 错误配置异常?

标签 java spring spring-integration spring-integration-dsl

使用 DSL 时是否有办法捕获 DestinationResolutionExceptionMessageDispatchingException?这些异常通常表示配置错误,但我不确定如何配置我的流程来捕获这些异常并应用一些自定义逻辑?

@SpringBootApplication
public class IntegrationMisconfigurationExampleApplication {
  public static void main(final String[] args) {
    SpringApplication.run(IntegrationMisconfigurationExampleApplication.class, args);
  }

  @Bean
  public IntegrationFlow loggingFlow() {
    return IntegrationFlows.from("input")
        .<String, String>transform(String::toUpperCase)
        // .nullChannel();
        .get();
  }

  @Bean
  public CommandLineRunner demo() {
    return args -> {
      final MessagingTemplate template = messagingTemplate();
      template.convertAndSend("input", "abc");
    };
  }

  @Bean
  public MessagingTemplate messagingTemplate() {
    return new MessagingTemplate();
  }
}

上面的示例抛出 DestinationResolutionException,因为 loggingFlow.transformer#0 未正确初始化。有没有办法捕获这个异常?

最佳答案

这些异常是运行时错误。我们确实无法确定启动时的配置是否错误。

捕获此类运行时异常并进行一些分析工作的方法是使用ExpressionEvaluatingRequestHandlerAdvice,您可以将其添加到您的transform(String::toUpperCase)配置中端点配置的第二个参数:

.<String, String>transform(String::toUpperCase, e-> e.advice(myExpressionEvaluatingRequestHandlerAdvice()))

请参阅引用手册中有关此建议的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/#message-handler-advice-chain

此外,您还需要记住,transformer 实际上是一个具有必需的非空返回值的请求-回复组件。因此,您确实不能仅针对单向流配置 transform()。当流中没有下一个 channel 或消息中没有 replyChannel header 时,它将引发异常。

关于java - 捕获 Spring Integration DSL 错误配置异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55282662/

相关文章:

spring - 如何在基于 Spring 的响应式(Reactive)应用程序中从身份验证中排除路径?

java - ant 目标 vssget 不起作用

java - 如何为 Java Metro WS 创建自定义管

java - 无论顺序如何,Hashset 上的 .equals 是否返回 true?

java - 消除 Java Spring 多对多关系中的循环 JSON

java - Spring 集成 ftp 适配器无法从 ftp 服务器轮询文件

Java - 错误 : return type is incompatible

java - Spring:使用 @Value 注释时,Bean 无法从外部属性文件读取值

java - 发现 javax.mail.AuthenticationFailedException : failed to connect, 未指定密码?在收听密码正确的新邮件时

spring - Kafka Spring 集成 : Headers not coming for kafka consumer