Spring 使用 "transactionManager" 尽管指定了另一个
Spring uses "transactionManager" although another one was specified
我在尝试使用 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 吗?
谢谢。
我认为你也应该用 @Bean
标记你的 PlatformTransactionManager
。
并在您的存储库中添加 @Transactional(transactionManager="jpaTransactionManager")
。实现默认使用不带参数的@Transactional,所以这就是它搜索默认"transactionManager" 的原因。已解释 there
在您的 spring 数据配置中,您应该向
添加一个参数
@EnableJpaRepositories(transactionManagerRef = "jtaTransactionManager")
默认值为"transactionManager"
我在尝试使用 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 吗?
谢谢。
我认为你也应该用 @Bean
标记你的 PlatformTransactionManager
。
并在您的存储库中添加 @Transactional(transactionManager="jpaTransactionManager")
。实现默认使用不带参数的@Transactional,所以这就是它搜索默认"transactionManager" 的原因。已解释 there
在您的 spring 数据配置中,您应该向
添加一个参数@EnableJpaRepositories(transactionManagerRef = "jtaTransactionManager")
默认值为"transactionManager"