【发布时间】:2011-07-12 13:01:06
【问题描述】:
我们有一个基于 Spring 的应用程序,该应用程序带有一个使用 @Transactional 注释的服务层。我们需要在一些事务方法之前和之后运行代码,原因如下:
- 我们需要根据一个键来同步对方法的访问。线程需要在事务开始之前阻塞。
- 如果事务成功,我们需要在队列中发布消息。
选项似乎是:
- 使用与服务类似的方法创建一个类,该类可以在同步块中运行 @Transactional 方法并检查返回然后发布消息(由于 AOP 代理问题,需要单独的类)。服务调用服务,不是很好,感觉像是一种变通方法。
- 编写一个切面来包裹@Transactional AOP,它可以进行同步和消息发布。可能有效,但宁愿避免 AOP。
- 将事务向下移动到域层。由于在不同工作流中重用领域方法的方式,当前实现不理想甚至可能不可行。
- 在服务方法中手动编码事务并废弃@Transactional。
我想这是一个相当普遍的要求。可能我错过了选项 5,这是显而易见的!
【问题讨论】: