多个事务管理器

时间:2017-09-03 06:43:32

标签: java spring spring-data spring-data-jpa

下面是我在spring配置类中创建的transactionManager。

@Bean(name = "dataSourceTXMgr")
    public PlatformTransactionManager getTransactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }



@Bean(name = "jpaTXMgr")
public JpaTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean factory) throws ClassNotFoundException
{
    System.out.println("JPA");
    return new JpaTransactionManager(factory.getObject());
}

但是在调用下面的方法时会遇到异常 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为'transactionManager'的bean

@Transactional(value = "jpaTXMgr")
    public Staff find(String userId, String password) {
        Staff staff = staffRepository.findOne(userId);
        return staff;
    }

@EnableTransactionManagement已在我的spring配置类中应用。请让我知道缺少什么

1 个答案:

答案 0 :(得分:0)

假设您正在使用' EnableJpaRepositories'注释,使用它来设置您要使用的事务管理器。有关详细信息,请参阅其文档:https://docs.spring.io/spring-data/data-jpa/docs/current/api/org/springframework/data/jpa/repository/config/EnableJpaRepositories.html#transactionManagerRef--

正在发生的事情是:当您在' @Transactional'中指定自己的交易管理器时注释存储库带有自己的隐式注释。所以它基本上是在两个交易中运行,其中一个交易失败。