如何使用自定义 'TransactionAttributeSource' 和 Spring 5
How to use a custom 'TransactionAttributeSource' with Spring 5
在Spring5中有ProxyTransactionManagementConfiguration
。
这定义了:
@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public TransactionAttributeSource transactionAttributeSource() {
return new AnnotationTransactionAttributeSource();
}
当我在自己的配置中定义自己的 TransactionAttributeSource
时,如:
@Bean
@Primary
public TransactionAttributeSource transactionAttributeSource() {
return new RollbackOnAllTransactionAttributeSource();
}
我收到错误:
org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'transactionAttributeSource' defined in class path resource [...]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=true; factoryBeanName=[...]; factoryMethodName=transactionAttributeSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [...]] for bean 'transactionAttributeSource': There is already [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration; factoryMethodName=transactionAttributeSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/transaction/annotation/ProxyTransactionManagementConfiguration.class]] bound.
如何将自定义 'TransactionAttributeSource' 与 Spring 一起使用 5.
(适用于 Spring 4。)
有什么想法吗? TIA!
解决方法是设置
spring.main.allow-bean-definition-overriding=true
我在这里找到它:Spring Boot Upgrade Error - Invalid bean definition with name org.springframework.transaction.config.internalTransactionalEventListenerFactory
在Spring5中有ProxyTransactionManagementConfiguration
。
这定义了:
@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public TransactionAttributeSource transactionAttributeSource() {
return new AnnotationTransactionAttributeSource();
}
当我在自己的配置中定义自己的 TransactionAttributeSource
时,如:
@Bean
@Primary
public TransactionAttributeSource transactionAttributeSource() {
return new RollbackOnAllTransactionAttributeSource();
}
我收到错误:
org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'transactionAttributeSource' defined in class path resource [...]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=true; factoryBeanName=[...]; factoryMethodName=transactionAttributeSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [...]] for bean 'transactionAttributeSource': There is already [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration; factoryMethodName=transactionAttributeSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/transaction/annotation/ProxyTransactionManagementConfiguration.class]] bound.
如何将自定义 'TransactionAttributeSource' 与 Spring 一起使用 5. (适用于 Spring 4。)
有什么想法吗? TIA!
解决方法是设置
spring.main.allow-bean-definition-overriding=true
我在这里找到它:Spring Boot Upgrade Error - Invalid bean definition with name org.springframework.transaction.config.internalTransactionalEventListenerFactory