将@Transactional注释放入'onMessage'方法

时间:2014-10-29 16:53:40

标签: java spring java-ee jpa jms

我发现了类似的问题here,但没有找到关于后端(数据库)事务管理的明确答案

我目前的项目是创建生产者/消费者,让消费者消化JMS消息并持久存储在数据库中。由于应用程序的后端由JPA管理,因此保持整个流程的事务性至关重要。我的问题是,如果在经典@Transactional方法上放置onMessage注释,会有什么缺点?如果这样做,是否存在潜在的性能挑战?

1 个答案:

答案 0 :(得分:1)

唯一的问题可能是整个队列进程花费的时间太长而且连接在操作过程中关闭。除此之外,如果为整个队列进程而不是按照特定的服务方法启用事务,那么从理论上讲,性能应该是相同的。

最好为每个队列进程启用two phase commit(也称为XA事务)。然后,将每个特定的服务方法定义为@Transactional,并按预期与您的数据库进行交互。最后,XA事务将执行@Transactional服务方法完成的所有提交。请注意,使用此方法影响您的效果。