Обработка асинхронных ошибок jdbc-outbound-gateway в Spring

Я пытаюсь реализовать поток "забей и забудь" для записи сообщений в базу данных путем вызова процедуры Oracle, все работает нормально, но я хотел бы регистрировать любые исключения, которые я получаю, когда, по какой-либо причине, я неправильно настроил xml или что еще может пойти не так (какое-либо исключение, выданное процедурой?). Я искал довольно долгое время, но я, вероятно, что-то упустил...

Вот фактическая настройка: у меня есть интерфейс шлюза

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

XML определение шлюза

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

Затем конфигурация 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]

ОБНОВЛЕНИЕ 2: 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 ответ

Решение

Так как вы используете ExcutorChannel, любой Exception из потока ниже по течению ErrorMessage и отправлено по умолчанию errorChannel: http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/configuration.html

По умолчанию все эти исключения 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

И получить дело с исключением только на этой цели MessageHandler

Другие вопросы по тегам