gpt4 book ai didi

java - 带有 2 个事务管理器的 @EnableTransactionManagement 注释

转载 作者:IT老高 更新时间:2023-10-28 13:47:06 25 4
gpt4 key购买 nike

我正在使用 @Configuration用于配置spring而不是xml文件的注释。我正在使用不同的 session 工厂和不同的事务管理器配置 2 个数据源。我在这里遇到了 @EnableTransactionManagement 的问题注解。我在其文档中读到,

@EnableTransactionManagement is more flexible; it will fall back to a by-type lookup for any PlatformTransactionManager bean in the container. Thus the name can be "txManager", "transactionManager", or "tm": it simply does not matter.

这意味着无论我给方法起什么名字,它都会搜索返回 PlatformTransactionManager 的方法。对象,而我有 2 个事务管理器。现在的问题是,当我测试这个类时,它给了我错误:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.springframework.transaction.PlatformTransactionManager] is defined: expected single bean but found 2

我什至尝试拥有 2 个不同的配置类,但徒劳无功。在 xml 配置中,情况并非如此。我用两个 <tx:annotation-driven transaction-manager="" /> 注册了我的两个事务管理器标签,它工作正常。但不能在这里对注释做同样的事情。

如果我想在Spring注解的配置类中用2个不同的事务管理器来配置2个数据源怎么办?

最佳答案

在您的配置类中,使用 @EnableTransactionManagement 注释。

在这个类中定义一个事务管理器为:

    @Bean(name="txName")
public HibernateTransactionManager txName() throws IOException{
HibernateTransactionManager txName= new HibernateTransactionManager();
txName.setSessionFactory(...);
txName.setDataSource(...);
return txName;
}

在那里,在您执行事务性作业的类/方法中,注释如下:

@Transactional("txName")

@Transactional(value = "txName")

这就是您将名称合格的事务管理器绑定(bind)到您需要的任何地方的方式。您现在可以拥有任意数量的事务管理器,并在任何需要的地方相应地使用它。

关于java - 带有 2 个事务管理器的 @EnableTransactionManagement 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8050183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com