我正在使用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>
的更多信息。