返回顶部
首页 > 资讯 > 后端开发 > Python >解决nacos升级spring cloud 2020.0无法使用bootstrap.yml的问题
  • 778
分享到

解决nacos升级spring cloud 2020.0无法使用bootstrap.yml的问题

2024-04-02 19:04:59 778人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

Nacos升级spring cloud 2020.0无法使用bootstrap.yml 之前用spring cloud整合nacos,需要一个bootstrap.yml作为sprin

Nacos升级spring cloud 2020.0无法使用bootstrap.yml

之前用spring cloud整合nacos,需要一个bootstrap.yml作为spring启动的初始化配置

bootstrap.yml内容大概如下:


spring:
  application:
    # 应用名称
    name: xxx
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        file-extension: yml
        server-addr: localhost:8848
        username: nacos
        passWord: nacos

把spring cloud升级到2020.0.x以后,nacos就读不到bootstrap.yml了

spring官方其实在change note中说明了,在新版中将spring.cloud.bootstrap.enabled默认设置为false不启用:

https://GitHub.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2020.0-Release-Notes#breaking-changes

源码部分如下:




package org.springframework.cloud.util;
import org.springframework.core.env.Environment;
import org.springframework.util.ClassUtils;
public abstract class PropertyUtils {

 
 public static final String BOOTSTRAP_ENABLED_PROPERTY = "spring.cloud.bootstrap.enabled";

 
 public static final String USE_LEGACY_PROCESSING_PROPERTY = "spring.config.use-legacy-processing";

 
 public static final String MARKER_CLASS = "org.springframework.cloud.bootstrap.marker.Marker";

 
 public static final boolean MARKER_CLASS_EXISTS = ClassUtils.isPresent(MARKER_CLASS, null);

 private PropertyUtils() {
  throw new UnsupportedOperationException("unable to instatiate utils class");
 }

 
 public static boolean bootstrapEnabled(Environment environment) {
  return environment.getProperty(BOOTSTRAP_ENABLED_PROPERTY, Boolean.class, false) || MARKER_CLASS_EXISTS;
 }

 public static boolean useLegacyProcessing(Environment environment) {
  return environment.getProperty(USE_LEGACY_PROCESSING_PROPERTY, Boolean.class, false);
 }
}

解决方案是在vm启动参数中增加-Dspring.cloud.bootstrap.enabled=true,或者增加spring-cloud-starter-bootstrap依赖,至于spring cloud alibaba nacos后续是否能支持application.yml,目前alibaba官方还没有回复

nacos避坑指南!nacos 配置中心无法加载bootstrap.yml/properties配置文件

在使用nacos时引入以下两个依赖:


<!--服务注册/发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
 
<!--配置中心来做配置管理-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

错误异常信息:

com.alibaba.nacos.api.exception.NacosException: java.lang.reflect.InvocationTargetException

......

Caused by: java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_211]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_211]
at sun.reflect.DelegatinGConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_211]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_211]
at com.alibaba.nacos.api.config.ConfigFactory.createConfigService(ConfigFactory.java:42) ~[nacos-api-1.1.1.jar:na]
... 34 common frames omitted
Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blank

解决方案:加入以下依赖即可


<!-- 若bootstrap配置不生效,加入以下依赖 -->
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-bootstrap</artifactId>
     <version>3.0.1</version>
</dependency>

配置文件:

在启动服务后的第一条日志信息:

上面的 【conpon-service.properties】添加到nacos中

补充一下:nacos配置修改后,项目中要动态实时更新,项目中需要动态配置,在congtroller中加入一个注解


@RefreshScope // 动态刷新nacos配置

即可。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 解决nacos升级spring cloud 2020.0无法使用bootstrap.yml的问题

本文链接: https://lsjlt.com/news/127783.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作