我尝试通过调用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>
答案 0 :(得分:0)
由于您使用的是ExcutorChannel
,因此下游流程中的任何Exception
都会被包裹到ErrorMessage
并发送到默认errorChannel
:http://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