springcloudAlibaba设置allow-bean-definition-overriding=true不生效问题解决
有个新项目需要启动。因为有部分业务的请求相对来讲比其它的要强的多。而且还受到第三方的影响较深基于这种情况,微服务的使用方式就提上了日程。原来两年前的微服务架构,考虑到技术的变化,就准备升级了下包看到最新的2021版本已经出炉了。解决了那么多的bug,不升级都对不起自己了,关键这个还是新项目,没有负担。那么就升级最新版本前面都很OK,在启动服务的时候,提示了以下错误。上面说是因为bean名称重复了,
背景
有个新项目需要启动。
因为有部分业务的请求相对来讲比其它的要强的多。
而且还受到第三方的影响较深
基于这种情况,微服务的使用方式就提上了日程。
原来两年前的微服务架构,考虑到技术的变化,就准备升级了下包
看到最新的2021版本已经出炉了。
解决了那么多的bug,不升级都对不起自己了,关键这个还是新项目,没有负担。
那么就升级最新版本
问题
前面都很OK,在启动服务的时候,提示了以下错误。
***************************
APPLICATION FAILED TO START
***************************
Description:
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.
Action:
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
public static void main(String[] args) {
SpringApplication application = new SpringApplication(ApplicationRun.class);
application.setAllowBeanDefinitionOverriding(true);
application.run(args);
}
方案2:增加相关依赖包
新的版本中,springcloud把bootstrap等单独拆分了出来。
所以需要单独引入bootstrap包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
这两种方案,重新编译后运行都一切正常
总结
升级新版本好处多多,但是版本升级不要一下跨度太大。这样的话相关的包之间的引用就会产生一些版本不兼容的问题。
更多推荐
所有评论(0)