参考官方例子编写配置
https://github.com/alibaba/sp...
环境代码:
pom:
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- openfeign 远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--openfeign 需要 loadbalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!-- Nacos 服务注册发现 注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
bootstrap.properties
spring.cloud.nacos.config.server-addr=192.168.1.104:8848
spring.application.name=coupon
CouponController.java
@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
/** 从 Nacos 配置中心读取配置 */
@Value("${coupon.user.name}")
private String userName;
@Value("${coupon.user.age}")
private Integer userAge;
@RequestMapping("/test")
public R test() {
return R.ok().put("name", userName).put("age",userAge);
}
}
application.properties
coupon.user.name=zhansan
coupon.user.age=19
问题描述
项目启动无报错,但是不能读取到 Nacos 中配置的数据,而且似乎是根本没有连接到Nacos(注册中心功能可以正常注册),因为如果注释掉application.propertis
中的属性 coupon.user.name 则会直接报错,提示@Value("${coupon.user.name}") 读不到配置;
Nacos Config Starter 实现了 org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。
在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的数据转换成 PropertySource 且注入到 Environment 的 PropertySources 属性中,所以使用 @Value 注解也能直接获取 Nacos Server 端配置的内容。
根据上面官方例子中的原理的说明 Nacos Config Starter 实现PropertySourceLocator接口,而我在其实现类中debug并没有执行,由此判断是可能没有连接Nacos, 有熟悉这块的可以给点意见吗?
再就是maven依赖中的一个问题, 这里点击spring-cloud-starter-alibaba-nacos-config进入其pom中有依赖是爆红的,而且.m2/repository 中确实是没有爆红的这些jar包,不知道这个问题是否有影响;
导致Nacos中有些配置类 @ConditionalOnClass 没有生效。
<!-- Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
原因是 最新版本(2021.0.1.0)移除了 spring-cloud-starter-bootstrap 的支持,改用 spring.config.import
解决方法: https://github.com/alibaba/sp...