Spring中的jdbc-outbound-gateway异步错误处理

时间:2014-10-17 10:15:45

标签: spring spring-integration spring-jdbc

我尝试通过调用Oracle过程来实现一个即发即弃的流程来记录数据库上的消息,一切正常但我想记录任何异常机会,我错误配置了xml或其他任何可能出错的地方(程序抛出的任何异常?)。 我已经搜索了很长时间,但我可能错过了一些东西......

以下是实际设置: 我有一个网关接口

public interface gatewayInterfaceDEF{
    void monitoring(Object payload);
}

网关的XML定义

<int:gateway service-interface="gatewayInterfaceDEF">
        <int:method name="monitoring" request-channel="monitoringGatewayInbound" />
</int:gateway>

然后调用oracle过程的JDBC-outbound-gateway xml配置:

<int:channel id="monitoringGatewayInbound">
    <int:dispatcher task-executor="monitoringTaskExecutor"/>
</int:channel>

<int-jdbc:stored-proc-outbound-gateway
    id="monitoringGatewayProcedure" request-channel="monitoringGatewayInbound"
    data-source="dataSource" stored-procedure-name="procedureName"
    return-value-required="false" ignore-column-meta-data="true">
    <int-jdbc:sql-parameter-definition
        someparameters />
    <int-jdbc:parameter parameter mapping />
</int-jdbc:stored-proc-outbound-gateway>

提前致谢

我发现了这个:http://java.dzone.com/articles/spring-async-and-exception 但是它无法正常工作:我可能无法实现它,但仍然可以。

更新:我得到的包装日志。

|TEST|2014-10-17 17:09:08,999|||059EF53A6C4D2F67E0540003BA7A7C43|[monitoringTaskExecutor-1]|INFO |STDOUT|17:09:08,999 ERROR [LoggingHandler] org.springframework.integration.MessageHandlingException: error occurred in message handler [org.springframework.integration.jdbc.StoredProcOutboundGateway#0]

UPDATE2:使用

的jboss-log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="STDFILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
        <param name="append" value="true" />
        <param name="file" value="/var/share/test/logs/test-ws_out.log" />
        <param name="datePattern" value="yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="TEST|%d|%X{req.remoteHost}|%X{sessionid}|%X{lcontext}|[%t]|%-5p|%c|%m%n|" />
        </layout>
    </appender>

    <root>
        <level value="INFO" />
        <appender-ref ref="STDFILE" />
    </root>
</log4j:configuration>

1 个答案:

答案 0 :(得分:0)

由于您使用的是ExcutorChannel,因此下游流程中的任何Exception都会被包裹到ErrorMessage并发送到默认errorChannelhttp://docs.spring.io/spring-integration/docs/latest-ga/reference/html/configuration.html#namespace-errorhandler

默认情况下,所有这些例外都由LoggingHandler在具有org.springframework.integration.handler级别的ERROR类别下展开。

从另一方面,您可以将ExpressionEvaluatingRequestHandlerAdvice添加到<int-jdbc:stored-proc-outbound-gateway>http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/messaging-endpoints-chapter.html#expression-advice

仅在目标MessageHandler

上处理异常