当前位置:   article > 正文

springcloudAlibaba设置allow-bean-definition-overriding=true不生效问题解决_allow-bean-definition-overriding: true

allow-bean-definition-overriding: true

 背景

有个新项目需要启动。

因为有部分业务的请求相对来讲比其它的要强的多。

而且还受到第三方的影响较深

基于这种情况,微服务的使用方式就提上了日程。

原来两年前的微服务架构,考虑到技术的变化,就准备升级了下包

看到最新的2021版本已经出炉了。

解决了那么多的bug,不升级都对不起自己了,关键这个还是新项目,没有负担。

那么就升级最新版本

问题

前面都很OK,在启动服务的时候,提示了以下错误。

  1. ***************************
  2. APPLICATION FAILED TO START
  3. ***************************
  4. Description:
  5. The bean 'redisTemplate', defined in class path resource [com/XX/XX/redis/autoconfigure/RedisAutoConfigure.class], could not be registered. A bean with that name has already been defined in class path resource [org/redisson/spring/starter/RedissonAutoConfiguration.class] and overriding is disabled.
  6. Action:
  7. Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

上面说是因为bean名称重复了,设置spring.main.allow-bean-definition-overriding=true来解决。

但是我实际再bootstrap.yaml中已经设置了当前值。

那么结果已经很明显了,就是spring.main.allow-bean-definition-overriding=true没有生效。

解决方案

既然没有生效,那就让他生效好了。

生效的方式有两个

方案1:代码强制生效

一个是修改代码,在启动的main方法中强制设置allow-bean-definition-overriding=true

  1. public static void main(String[] args) {
  2. SpringApplication application = new SpringApplication(ApplicationRun.class);
  3. application.setAllowBeanDefinitionOverriding(true);
  4. application.run(args);
  5. }

方案2:增加相关依赖包

新的版本中,springcloud把bootstrap等单独拆分了出来。

所以需要单独引入bootstrap包

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-bootstrap</artifactId>
  4. </dependency>

这两种方案,重新编译后运行都一切正常

总结

升级新版本好处多多,但是版本升级不要一下跨度太大。这样的话相关的包之间的引用就会产生一些版本不兼容的问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/392415
推荐阅读
相关标签
  

闽ICP备14008679号