我正在使用POJO(实际上是POGO)实现一个自定义的Transformer,该POJO本质上是一种文本转换服务。

我想让它“知道”它所属的事务,在事务结束时,如果整个事务成功,则调用一个方法,如果事务回滚,则调用另一个方法。

有什么提示吗?

谢谢!

最佳答案

您需要的称为TransactionSynchronization。但是我不确定您是否会担心如此低的级别,仅需try...catch TX内容就足够了。

即使它是POJO(或POGO吗?),您仍然将其配置为<transformer>@Transformer)。 Spring Integration中的此类组件具有<request-handler-advice-chain>adviceChain)选项,可以在Advice方法调用周围插入任何handleRequestMessage实现。

为了您的目的,您可以这样做:

<transformer>
   <request-handler-advice-chain>
       <beans:bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
            <beans:property name="onSuccessExpression" value=""/>
            <beans:property name="onFailureExpression" value=""/>
       </beans:bean>
       <tx:advice>
           <tx:attributes>
               <tx:method name="*" />
           </tx:attributes>
       </tx:advice>
   </request-handler-advice-chain>
</transformer>


TX语义将被ExpressionEvaluatingRequestHandlerAdvice包裹起来,从而在TX结果上调用所需的操作,在我们的案例中,这是基于TX rallback上Exception的事实。

您可以从Reference Manual阅读有关<request-handler-advice-chain>的更多信息。

10-01 12:26