当前位置: 首页 > 知识库问答 >
问题:

Spring Boot 2.3.1重复的Bean定义

左丘边浩
2023-03-14

我正在从Spring Boot 1.5. x升级到2.3.1。

遇到以下错误,已在Spring boot中修复。https://jira.spring.io/browse/DATAJPA-1448

尝试了以下属性解决方法,但效果不佳。

Spring主要的允许bean定义重写=true

有人面临同样的问题或解决方法吗?

以下错误

org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'org.springframework.context.config.internalBeanConfigurerAspect' defined in org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration; factoryMethodName=beanConfigurerAspect; initMethodName=null; destroyMethodName=(inferred); defined in org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration] for bean 'org.springframework.context.config.internalBeanConfigurerAspect': There is already [Root bean: class [org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=aspectOf; initMethodName=null; destroyMethodName=null] bound.
at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:941) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:286) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:144) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:280) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:96) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:707) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:533) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) ~[spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE]
at XXXXXXXXXXXXXXXXXXXXX.main(XXXXXXXXXXXXXXXXXX.java:38) [classes/:

**

更新

**

以编程方式设置AllowBean定义覆盖有助于解决这部分问题(之前尝试通过属性文件注入),但保持此线程打开,因为原始根原因在sping-jpa中,sping-bean还不明显。

   SpringApplication sa = new SpringApplication(xxxxxxx.class);
   sa.setAllowBeanDefinitionOverriding(true);

共有1个答案

微生学
2023-03-14

我们面临着与OP类似的问题——一旦从Spring boot2.2.8升级到2.3.1,围绕自动配置的jUnit测试开始失败,出现BeanDefitionOverrideException错误,OP提到的解决方案不起作用。通过属性文件或环境后处理器设置属性spring.main.allow-bean-定义-覆盖=true也不起作用。

修复:

我们正在使用Application ationContextRunner来测试在上下文中加载多个bean。从Application ationContextRunner的实例中调用带有AllowBeanDefitionOverger(true)的方法修复了它。

根据此处的Spring Boot 2.3.0发行说明

“为了与SpringApplication保持一致,ApplicationContextRunner现在默认情况下禁用bean重写。如果需要对测试使用bean重写,可以使用withAllowBeanDefinitionOverriding来启用它。”

 类似资料:
  • 我的配置如下所示: 在应用程序上下文启动期间,我会在日志中收到如下内容: [INFO][]重写bean“ReconficationJob”的bean定义:替换[Generic bean:class[org.springframework.batch.core.configuration.xml.SimpleFlowFactoryBean];scope=;abstract=false;lazyIni

  • 我已经读过关于EJB、Java Beans的文章,但是我仍然怀疑术语“bean”本身是什么意思? A)简单的术语“bean”本身存在吗? B)现在来看看Java beans。正如我所读到的,它只是一个普通的POJO,它遵循某种命名约定,并且有getter和setter?然而,我很难理解这种约定是如何使它们成为“可重用组件”的,正如我在包括SO在内的许多文章中所读到的那样。

  • 我正在使用Spring Boot构建一个简单的CRUD操作,MySQL和Hibernate在这个操作中需要帮助。在Google上搜索了很多,StackOverflow没有找到合适的解决方案。 问题:服务器时区值“unknown”无法识别或表示多个时区。如果要利用时区支持,则必须配置服务器或JDBC驱动程序(通过配置属性)以使用更具体的时区值。 ...........................

  • 现在在我的适配器项目中,我有CommonAdapter.java的实现类一个是EndecaAdapetr.java,另一个是SolarAdapter.java 现在在我的服务项目中,希望基于输入调用上述两个类的服务方法。

  • 我有传输对象,包含两个bean:学生和用户。 } } 传输对象: } 我还有注册页面和表格: 获取和发布请求的控制器: 在填充字段之后,我单击submit按钮,得到下一条消息:“HTTP状态500-请求处理失败;嵌套异常为org.springframework.beans.NotReadablePropertyException:bean类[by.bsuir.ceres.bean.TO.Regis

  • 我有一个@Configuration注释类,它有@Bean注释方法。它们中的大多数只返回没有DI依赖项的新实例,例如: 但是一些bean需要构造函数注入,例如。 我该怎么做?