Spring integration 在JPAOutboundGateway中使用事务处理程序和请求处理程序建议链的正确方法

Spring integration 在JPAOutboundGateway中使用事务处理程序和请求处理程序建议链的正确方法,spring-integration,Spring Integration,我已经为JPA出站通道适配器准备了事务和请求处理程序建议链。在建议链中,当异常发生时,我尝试记录异常。 它没有被记录,但我知道它实际上发生了,因为消息被发送到故障切换clickDbFailoverChannel。有什么问题吗?这是Spring集成中的一个bug吗 <int:channel id="clickDbWithFailoverChannelSite-1"> <int:dispatcher load-balancer="none" task-executor="

我已经为JPA出站通道适配器准备了事务和请求处理程序建议链。在建议链中,当异常发生时,我尝试记录异常。 它没有被记录,但我知道它实际上发生了,因为消息被发送到故障切换clickDbFailoverChannel。有什么问题吗?这是Spring集成中的一个bug吗

<int:channel id="clickDbWithFailoverChannelSite-1">
     <int:dispatcher load-balancer="none" task-executor="clickDbSiteRouterExecutor"/>
</int:channel>
<int:bridge input-channel="clickDbWithFailoverChannelSite-1"
     output-channel="jpaOutboundChannelSite-1" order="1" send-timeout="100" />
<int:bridge input-channel="clickDbWithFailoverChannelSite-1"
     output-channel="clickDbFailoverChannel" order="2" />
<int-jpa:outbound-channel-adapter id="jpaOutboundChannelSite-1"
     persist-mode="PERSIST" flush-size="100" entity-manager-factory="emfSite-1">
    <int-jpa:transactional transaction-manager="transactionManagerSite-1" />
    <int-jpa:request-handler-advice-chain>
        <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
            <property name="failureChannel" ref="clickDbFailureLogger"/>
            <property name="onFailureExpression" value="#exception"/>
        </bean>
    </int-jpa:request-handler-advice-chain>
</int-jpa:outbound-channel-adapter>

好的。我猜你的问题在哪里。回滚事务的真正异常是在内部逻辑之前产生的,内部逻辑由
执行。这就是为什么
表达式评估RequestHandlerAdvice
不会收到失败消息的原因

要解决回滚问题,您应该在
中用
替换

这里您应该理解,
代表整个
messagehandlemessage.handleMessage
,而
只代表它的一部分-
AbstractReplyProducingMessageHandler.handleRequestMessage

更新

TX建议如下:

 <tx:advice transaction-manager="transactionManagerSite-1"/>
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>
</tx:advice>


对不起,信息不够。一些StackTrace来看看SI哪里不对。有些浮桥不能正常工作。它应该如何工作等等…很好。让我从测试用例中检查一下,并更新了答案。很抱歉,谢谢,不再有
TransactionRequiredException
,但不幸的是,当我关闭数据库时,日志中的RequestHandler没有像以前一样出现异常。我期望类似“无法从底层数据库获取连接!”。所以实际上它现在看起来像是在原来的帖子里。只有hibernate异常得到了cougt(即字段长度验证等),但它在原始版本中也能工作,而且配置看起来已经很难看了。您是否计划对此问题采取更为方便的措施?您可以将
表达式评估RequestHandlerAdvice
配置为单独的bean,并在此处使用