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

网友投稿 431 2023-01-09

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

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

源码部分如下:

/*

* Copyright 2013-2020 the original author or authors.

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* https://apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package org.springframework.cloud.util;

import org.springframework.core.env.Environment;

import org.springframework.util.ClassUtils;

public abstract class PropertyUtils {

/**

* Property name for checking if bootstrap is enabled.

*/

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

/**

* Property name for spring boot legacy processing.

*/

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

/**

* Property name for bootstrap marker class name.

*/

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

/**

* Boolean if bootstrap marker class exists.

*/

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

private PropertyUtils() {

throw new UnsupportedOperationException("unable to instatiate utils class");

}

/**

* 判断是否启用bootstrap.yml的时候默认设置成了false

*/

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时引入以下两个依赖:

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-config

错误异常信息:

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

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

org.springframework.cloud

3.0.1

配置文件:

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

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

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

@RefreshScope // 动态刷新nacos配置

即可。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JVM要双亲委派的原因及如何打破它
下一篇:springboot利用aspose预览office文件的实现过程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~