为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 tx annotation-driven 会产生冲突?

为什么 tx annotation-driven 会产生冲突?

噜噜哒 2022-12-15 15:01:58
大家好,我在使用 Spring MVC,我有一个问题。我有这个交易的bean定义:<tx:annotation-driven transaction-manager="txManager"/>    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource"/>    </bean>但是当我运行我的应用程序时,我遇到了这个异常:2019-05-24 18:14:51 DEBUG osbdLoggingFailureAnalysisReporter - 由于异常 org.springframework.beans.factory.support.BeanDefinitionOverrideException,应用程序无法启动:定义了名称为“org.springframework.transaction.config.internalTransactionAdvisor”的无效 bean 定义在类路径资源 [org/springframework/transaction/annotation/ProxyTransactionManagementConfiguration.class] 中:无法注册 bean 定义 [Root bean: class [null]; 范围=; 摘要=假;懒惰初始化=假;自动接线模式=3;依赖检查=0;autowireCandidate=真;初级=假;factoryBeanName=org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration; factoryMethodName=交易顾问;初始化方法名=空;destroyMethodName=(推断);在类路径资源 [org/springframework/transaction/annotation/ProxyTransactionManagementConfiguration.class]] 中为 bean 'org.springframework.transaction.config.internalTransactionAdvisor' 定义:已经有 [Root bean: class [org.springframework.transaction.interceptor. BeanFactoryTransactionAttributeSourceAdvisor]; 范围=; 摘要=假;懒惰初始化=假;自动接线模式=0;依赖检查=0;autowireCandidate=真;初级=假;工厂BeanName=null;工厂方法名=空;初始化方法名=空;destroyMethodName=null] 绑定。在 org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:897) 在 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader。当我评论 tx:annotation-drive 时,一切正常,但带有 @Transactional 注释的方法不起作用。我究竟做错了什么?我的 gradle 依赖项:compile group: 'org.springframework', name: 'spring-web', version: '5.1.5.RELEASE'    compile group: 'org.springframework', name: 'spring-webmvc', version: '5.1.5.RELEASE'    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.1.3.RELEASE'compile group: 'org.springframework', name: 'spring-jdbc', version: '5.1.5.RELEASE'
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您需要做的是启用Bean Overriding. 从 Spring 2.1 开始,默认情况下禁用此功能。你得到一个异常,因为已经有一个用相同名称定义的 bean。

Spring 2.1 发行说明摘录:发行说明 2.1 - Bean Overriding

长话短说,您需要将其添加到您的application.properties文件中:

spring.main.allow-bean-definition-overriding=true

或者在 yaml 中:

spring:
   main:
     allow-bean-definition-overriding: true


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号