【问题标题】:Spring uses "transactionManager" although another one was specified尽管指定了另一个,但 Spring 使用“transactionManager”
【发布时间】:2017-01-24 12:05:54
【问题描述】:

尝试使用 Spring 事务时出现以下错误:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'transactionManager' is defined: No matching PlatformTransactionManager bean found for qualifier 'transactionManager' - neither qualifier match nor bean name match!

虽然我指定了另一个名字。这是代码sn-p:

@EnableTransactionManagement
public class TransactionConfig {
...
    @Bean
    @Qualifier(value ="jpaTransactionManager")
public PlatformTransactionManager jpaTransactionManager(EntityManagerFactory emf) {
    JpaTransactionManager tm = new JpaTransactionManager();
    tm.setEntityManagerFactory(emf);
    tm.setDataSource(primaryDataSource());
    return tm;
}

    @Bean()
    @Qualifier(value="jtaTransactionManager")
    public JtaTransactionManager jtaTransactionManager(UserTransactionManager    atomikosTransactionManager) {
      ......

我是这样使用它的:

@Transactional(transactionManager="jpaTransactionManager")
public class UserService {

public Iterable<FVUser> findWithQuery(Specification<FVUser> spec) {
    return repository.findAll(spec);
} 

存储库:

@Repository
public interface UserRepository extends PagingAndSortingRepository<FVUser, String>, JpaSpecificationExecutor<FVUser>  {

调试时我注意到它正确使用“jpaTransactionManger”来调用服务方法,但似乎在寻找“transactionManager”来调用存储库方法,尽管没有为它指定事务。

有人知道为什么 Spring 在这种情况下要寻找默认的“transactionManager”bean 吗?

谢谢。

【问题讨论】:

    标签: spring spring-transactions


    【解决方案1】:

    我认为你也应该用@Bean 标记你的PlatformTransactionManager

    并在您的存储库中添加@Transactional(transactionManager="jpaTransactionManager")。实现默认使用不带参数的@Transactional,这就是它搜索默认“transactionManager”的原因。解释了there

    【讨论】:

    • 对不起。它是一种豆子。我只是错误地跳过了它。我更新了帖子。
    • 我在存储库上也添加了@Transactional(transactionManager="jpaTransactionManager"),但结果相同。无论如何,我不希望存储库方法具有事务性。只是将服务方法包装在事务中。
    【解决方案2】:

    在您的 spring 数据配置中,您应该向

    添加一个参数
    @EnableJpaRepositories(transactionManagerRef = "jtaTransactionManager")
    

    默认值为“事务管理器”

    【讨论】:

    • 是的。这就是解决办法。谢谢。
    猜你喜欢
    • 2019-09-28
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多