2014-02-27 44 views
0

在单线程Spring Integration中,整个pipleine在同一事务中运行的应用程序中,错误通道不适用。相反,异常将被抛回给调用者。单线程应用程序中的错误处理

我这样做的方式是定义一个服务激活器,它是处理传入消息的组件链中的第一个。

@ServiceActivator 
public Message handleException(Message message) { 
    try { 
     return message; 
    } 
    catch (Throwable throwable){ 
     // HANDLE ERROR 
    } 
    return null; 
} 

这是正确的方法,还是有更好的策略?

谢谢

回答

1

不;根本不会做任何事;它只会将消息传递给链中的下一个元素。如果你不需要以任何方式处理这个错误,并且只是想把它抛回给调用者,你就不需要做任何事情。如果流程的开始是网关,则网关将从MessagingException中解开原因。

当然,您可以在网关上放置一个错误通道并在那里处理它。

当提出这些一般性问题时,通常最好提供一些关于流程(入口点等)的更多细节。

+0

谢谢加里,应该是更具体。我的入口点是jdbc:入站通道适配器(使用任务执行程序)。我知道在单线程应用程序中,可以在网关中放置错误通道,但是可以在这种情况下为jdbc适配器定义一个错误通道?如果不是,当入口点是jdbc适配器时,应如何处理单线程/事务方案的错误? – user1052610

+0

是的,'error-channel'在轮询端点的轮询器(不是适配器)上。轮询器触发,切换到“TE”线程。如果轮询器是事务性的,则交易开始;如果抛出一个异常,'ErrorMessage'被发送到事务中的'error-channel',所以错误流可以决定是否捕获和处理,在这种情况下事务被提交,或者如果错误流引发异常,交易将被回滚。 –