尝试使用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!
虽然我已经指定了另一个名字。这是代码片段:
@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吗?
感谢。
答案 0 :(得分:0)
我认为你应该用PlatformTransactionManager
标记@Bean
。
在您的存储库中添加@Transactional(transactionManager="jpaTransactionManager")
。默认情况下,实现使用没有参数的@Transactional,这就是它搜索默认值&#34; transactionManager&#34;的原因。它被解释为there
答案 1 :(得分:0)
在弹簧数据配置中,您应该添加一个参数
@EnableJpaRepositories(transactionManagerRef = "jtaTransactionManager")
默认值为“transactionManager”