Spring 集成中的事务感知 POJO

Transaction-aware POJO in Spring Integration

我正在使用基本上是文本转换服务的 POJO(实际上是 POGO)实现自定义 Transformer。

我想让它成为它所属的事务的"aware",并且在事务结束时,如果整个事务成功则调用一个方法,如果事务回滚则调用另一个方法。

有什么提示吗?

谢谢!

你需要的是TransactionSynchronization。但我不确定你是否应该担心这么低的水平,它们足以让你 try...catch TX 东西。

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

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

<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 回滚 Exception 的事实。

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