BeanDefinitionOverrideException产生原因及解决方案

BeanDefinitionOverrideException 是 Spring 框架中与依赖注入(Dependency Injection)相关的异常。它通常在 Spring 应用程序启动时抛出,当 Spring 在加载应用程序上下文时,检测到有多个相同名称的 Bean 定义被加载,并且这些定义冲突时,Spring 会抛出这个异常。

一、产生原因

BeanDefinitionOverrideException 的产生通常有以下几种原因:

  1. 同名的 Bean 定义:

    • 原因: 在同一个 Spring 应用上下文中,有多个 Bean 使用了相同的名称(beanName)。由于 Spring 默认情况下不允许覆盖同名的 Bean 定义,因此当出现这种情况时,会抛出 BeanDefinitionOverrideException
    • 示例:
      @Bean(name = "myBean")
      public MyBean bean1() {
          return new MyBean();
      }
      
      @Bean(name = "myBean")
      public MyBean bean2() {
          return new MyBean();
      }
      
      在上面的例子中,bean1bean2 方法都定义了名为 myBean 的 Bean,这会导致异常。
  2. 多次加载相同的配置文件或类:

    • 原因: 如果不小心多次加载了同一个 Spring 配置文件、注解配置类或者 XML 配置文件,也可能导致同名的 Bean 被定义多次。
    • 示例:
      @Configuration
      @Import({AppConfig.class, AppConfig.class}) // 重复导入同一个配置类
      public class MainConfig {
      }
      
      在上面的例子中,AppConfig 被重复导入,导致其内的 Bean 定义重复。
  3. Spring Boot 的自动配置冲突:

    • 原因: 在 Spring Boot 项目中,可能会由于自动配置类和手动配置类之间的 Bean 名称冲突而引发此异常。
    • 示例: 开发者手动定义了一个与 Spring Boot 自动配置类相同名称的 Bean。
  4. 使用了 @Primary 或者 @Qualifier 但没有正确配置:

    • 原因: 当多个相同类型的 Bean 存在且没有指定 @Primary 或者 @Qualifier 时,Spring 可能会尝试定义多个同名的 Bean,导致冲突。

二、解决方案

  1. 检查并避免同名 Bean 定义:

    • 确保在所有配置类或 XML 配置文件中,定义的 Bean 名称是唯一的。可以通过使用 @Qualifier 或者 @Primary 来区分不同的 Bean。
  2. 移除重复加载的配置:

    • 检查是否在应用上下文中重复加载了同一个配置类或 XML 文件。避免重复导入相同的配置源。
  3. 使用 spring.main.allow-bean-definition-overriding 属性:

    • 如果确实需要覆盖同名的 Bean,可以在 Spring Boot 项目的 application.properties 文件中启用覆盖功能:
      spring.main.allow-bean-definition-overriding=true
      
    • 这将允许 Spring 覆盖同名的 Bean 定义。不过,需要谨慎使用,因为这可能会导致不易察觉的错误。
  4. 使用 @Primary@Qualifier 注解:

    • 在多 Bean 存在的情况下,使用 @Primary 来指定默认使用的 Bean,或使用 @Qualifier 注解来明确注入特定的 Bean。
  5. 优化配置:

    • 如果有必要,重构或合并相似的配置,确保相同名称的 Bean 定义不会出现在同一个上下文中。

三、总结

BeanDefinitionOverrideException 是由于 Spring 应用上下文中存在多个同名的 Bean 定义导致的。解决这个问题通常需要确保 Bean 名称的唯一性,避免重复加载配置,并且在必要时使用 @Primary@Qualifier 来明确区分不同的 Bean。

C:\Users\24012\.jdks\ms-17.0.16\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59714,suspend=y,server=n -agentpath:C:\Users\24012\AppData\Local\Temp\idea_libasyncProfiler_dll_temp_folder9\libasyncProfiler.dll=version,jfr,event=wall,interval=10ms,cstack=no,file=C:\Users\24012\IdeaSnapshots\JiuyunUcServiceApplication_2025_10_10_161701.jfr,dbghelppath=C:\Users\24012\AppData\Local\Temp\idea_dbghelp_dll_temp_folder9\dbghelp.dll,log=C:\Users\24012\AppData\Local\Temp\JiuyunUcServiceApplication_2025_10_10_161701.jfr.log.txt,logLevel=DEBUG -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" -javaagent:C:\Users\24012\AppData\Local\JetBrains\IntelliJIdea2024.3\captureAgent\debugger-agent.jar -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Dfile.encoding=UTF-8 @C:\Users\24012\AppData\Local\Temp\idea_arg_file1472514120 com.jiuyun.JiuyunUcServiceApplication 已连接到地址为 ''127.0.0.1:59714',传输: '套接字'' 的目标虚拟机 2025-10-10T16:17:06.616+08:00 INFO 21360 --- [ main] c.alibaba.nacos.client.utils.ParamUtil : [settings] [req-serv] nacos-server port:8848 2025-10-10T16:17:06.633+08:00 INFO 21360 --- [ main] c.alibaba.nacos.client.utils.ParamUtil : [settings] [http-client] connect timeout:1000 2025-10-10T16:17:06.634+08:00 INFO 21360 --- [ Thread-1] c.a.n.c.a.r.identify.CredentialWatcher : null No credential found 2025-10-10T16:17:06.636+08:00 INFO 21360 --- [ main] c.alibaba.nacos.client.utils.ParamUtil : PER_TASK_CONFIG_SIZE: 3000.0 2025-10-10T16:17:06.695+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.labels : DefaultLabelsCollectorManager get labels..... 2025-10-10T16:17:06.696+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.labels : Process LabelsCollector with [name:defaultNacosLabelsCollector] 2025-10-10T16:17:06.696+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.labels : default nacos collect properties raw labels: null 2025-10-10T16:17:06.698+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.labels : default nacos collect properties labels: {} 2025-10-10T16:17:06.699+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.labels : default nacos collect jvm raw labels: null 2025-10-10T16:17:06.699+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.labels : default nacos collect jvm labels: {} 2025-10-10T16:17:06.699+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.labels : default nacos collect env raw labels: null 2025-10-10T16:17:06.699+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.labels : default nacos collect env labels: {} 2025-10-10T16:17:06.700+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.labels : DefaultLabelsCollectorManager get labels finished,labels :{} 2025-10-10T16:17:06.719+08:00 INFO 21360 --- [ main] c.a.n.p.a.s.c.ClientAuthPluginManager : [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. 2025-10-10T16:17:06.720+08:00 INFO 21360 --- [ main] c.a.n.p.a.s.c.ClientAuthPluginManager : [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.4.2) 2025-10-10T16:17:07.725+08:00 INFO 21360 --- [ main] c.a.n.c.c.impl.LocalConfigInfoProcessor : LOCAL_SNAPSHOT_PATH:C:\Users\24012\nacos\config 2025-10-10T16:17:07.731+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.remote.client : [RpcClientFactory] create a new rpc client of 6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0 2025-10-10T16:17:07.763+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.remote.client : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] Register server push request handler:com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$$Lambda$767/0x000001d85048ad88 2025-10-10T16:17:07.763+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.remote.client : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] Register server push request handler:com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$$Lambda$768/0x000001d85048b1a8 2025-10-10T16:17:07.765+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.remote.client : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] Registry connection listener to current client:com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$1 2025-10-10T16:17:07.765+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.remote.client : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] RpcClient init, ServerListFactory = com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$2 2025-10-10T16:17:07.775+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.remote.client : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] Try to connect to server on start up, server: {serverIp = '127.0.0.1', server main port = 8848} 2025-10-10T16:17:07.834+08:00 INFO 21360 --- [ main] c.a.n.c.remote.client.grpc.GrpcClient : grpc client connection server:127.0.0.1 ip,serverPort:9848,grpcTslConfig:{"sslProvider":"","enableTls":false,"mutualAuthEnable":false,"trustAll":false} 2025-10-10T16:17:10.018+08:00 INFO 21360 --- [ main] c.a.n.c.a.AbstractAbilityControlManager : Ready to get current node abilities... 2025-10-10T16:17:10.021+08:00 INFO 21360 --- [ main] c.a.n.c.a.AbstractAbilityControlManager : Ready to initialize current node abilities, support modes: [SDK_CLIENT] 2025-10-10T16:17:10.022+08:00 INFO 21360 --- [ main] c.a.n.c.a.AbstractAbilityControlManager : Initialize current abilities finish... 2025-10-10T16:17:10.023+08:00 INFO 21360 --- [ main] c.a.n.c.a.d.NacosAbilityManagerHolder : [AbilityControlManager] Successfully initialize AbilityControlManager 2025-10-10T16:17:10.061+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.remote.client : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] Success to connect to server [127.0.0.1:8848] on start up, connectionId = 1760084229800_127.0.0.1_59736 2025-10-10T16:17:10.063+08:00 INFO 21360 --- [remote.worker.0] com.alibaba.nacos.common.remote.client : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] Notify connected event to listeners. 2025-10-10T16:17:10.064+08:00 INFO 21360 --- [remote.worker.0] c.a.n.client.config.impl.ClientWorker : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] Connected,notify listen context... 2025-10-10T16:17:10.064+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.remote.client : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler 2025-10-10T16:17:10.064+08:00 INFO 21360 --- [ main] com.alibaba.nacos.common.remote.client : [6f83f9f9-b2cb-48dc-83a6-971d90af8159_config-0] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda$787/0x000001d8505d3a50 2025-10-10T16:17:10.184+08:00 INFO 21360 --- [ main] c.a.nacos.client.config.impl.Limiter : limitTime:5.0 2025-10-10T16:17:10.230+08:00 WARN 21360 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[null.properties] & group[DEFAULT_GROUP] 2025-10-10T16:17:10.233+08:00 INFO 21360 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-null.properties,DEFAULT_GROUP'}] 2025-10-10T16:17:10.250+08:00 INFO 21360 --- [ main] com.jiuyun.JiuyunUcServiceApplication : No active profile set, falling back to 1 default profile: "default" 2025-10-10T16:17:12.913+08:00 WARN 21360 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'jiuyun-uc-server.FeignClientSpecification' defined in null: Cannot register bean definition [Generic bean: class=org.springframework.cloud.openfeign.FeignClientSpecification; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null] for bean 'jiuyun-uc-server.FeignClientSpecification' since there is already [Generic bean: class=org.springframework.cloud.openfeign.FeignClientSpecification; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; fallback=false; factoryBeanName=null; factoryMethodName=null; initMethodNames=null; destroyMethodNames=null] bound. 2025-10-10T16:17:12.935+08:00 INFO 21360 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2025-10-10T16:17:12.979+08:00 ERROR 21360 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: The bean 'jiuyun-uc-server.FeignClientSpecification' could not be registered. A bean with that name has already been defined and overriding is disabled. Action: Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true 2025-10-10T16:17:12.982+08:00 WARN 21360 --- [ Thread-2] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Start destroying common HttpClient 2025-10-10T16:17:12.982+08:00 WARN 21360 --- [ Thread-5] c.a.nacos.common.notify.NotifyCenter : [NotifyCenter] Start destroying Publisher 2025-10-10T16:17:12.983+08:00 WARN 21360 --- [ Thread-5] c.a.nacos.common.notify.NotifyCenter : [NotifyCenter] Destruction of the end 2025-10-10T16:17:12.984+08:00 WARN 21360 --- [ Thread-2] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Destruction of the end 已与地址为 ''127.0.0.1:59714',传输: '套接字'' 的目标虚拟机断开连接 进程已结束,退出代码为 1
最新发布
10-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

境里婆娑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值