Обработка асинхронных ошибок 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