加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在@Transactional方法之前和之后执行代码

发布时间:2020-12-15 08:41:56 所属栏目:Java 来源:网络整理
导读:我们有一个基于 Spring的应用程序,其服务层使用@Transactional进行注释.我们需要在某些事务方法之前和之后运行代码,原因如下: 我们需要根据密钥同步对方法的访问.线程需要在事务开始之前阻塞. 如果事务成功,我们需要在队列上发布消息. 选项似乎是: 使用与
我们有一个基于 Spring的应用程序,其服务层使用@Transactional进行注释.我们需要在某些事务方法之前和之后运行代码,原因如下:

>我们需要根据密钥同步对方法的访问.线程需要在事务开始之前阻塞.
>如果事务成功,我们需要在队列上发布消息.

选项似乎是:

>使用与可在同步块中运行@Transactional方法的服务类似的方法创建一个类,并检查返回然后发布消息(由于AOP代理问题,需要单独的类).服务呼叫服务,不好,感觉就像一个解决方案.
>编写一个方面来包围@Transactional AOP,它可以进行同步和消息发布.可能会工作,但宁愿避免AOP.
>将事务向下移动到域层.由于域方法在不同工作流程中重用的方式,当前实现不可取或甚至不可行.
>在服务方法中手动编码交易并废弃@Transactional.

我认为这是一个相当普遍的要求.可能我错过了一个选项5,这是显而易见的!

解决方法

除非你有一些特定的理由要避免AOP,否则我认为我会选择2.您的问题是AOP可以使用的典型示例,结果看起来相当不错.这是一个如何实现它的一个很好的例子(如果你还没有读过): Advising transactional operations

如果AOP真的不是一个选项,我会选择@Lawrence McAlpin提出的’其他’选项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读