【问题标题】:@TransactionalEventListener how to bind TransactionManager [duplicate]@TransactionalEventListener 如何绑定 TransactionManager [重复]
【发布时间】:2021-06-27 05:40:41
【问题描述】:

我的项目中有多个数据源,每个数据源对应一个事务管理器,它们共享一个方面。现在我的项目有一个问题:事务提交后需要处理一些逻辑,比如发送Mq消息。我尝试使用@TransactionalEventListener实现,但是发现在AbstractPlatformTransactionManager.processCommit()中,他监听了其他事务的提交。我很疑惑,有什么解决办法吗?@TransactionEventListener中的条件怎么用? Spring 版本 5.1.5.RELEASE

【问题讨论】:

    标签: java spring datasource mybatis spring-transactions


    【解决方案1】:

    我不确定这是否能解决您的问题,但处理多个 TransactionManager 的一种方法是在 @Transactional 注释中添加一个参数,告诉您使用哪个 TransactionManager:

    public class TransactionalService {
    
        @Transactional("order")
        public void setSomething(String name) { ... }
    
        @Transactional("account")
        public void doSomething() { ... }
    }
    

    更多详情请查看https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html#tx-multiple-tx-mgrs-with-attransactional

    【讨论】:

    • 谢谢你的回答,可能我的问题不是很清楚。现在我的多个 TransactionManagers 已经配置好并且可以工作了。现在我需要监控其中一项交易。比如事务提交执行一些逻辑后,发现可以使用@TransactionalEventListener注解处理,但是无法绑定到需要事务管理器
    • @Faxon 感谢您的澄清。对不起,但我可以帮你解决这个问题。我建议您使用上次评论中的信息更新您的问题,以便其他人更容易回答。
    猜你喜欢
    • 2015-05-05
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2017-02-10
    • 2013-12-18
    相关资源
    最近更新 更多