1:首先先看到nacos中配置得代码
2在服务中导入,既然要使用到nacos中得配置,所以要在项目运行application.yml之前要先拿到配置。
解决办法:
1:进行导包,加入nacos管理依赖。
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2:创建bootstrap.yml文件,将application.yml中关于nacos中得配置换到bootstrap.yml中,因为 bootstrap.yml文件优先级高于application.yml。
spring:
application:
name: userservice #1:服务名
profiles:
active: dev #2:开发环境
cloud:
nacos:
server-addr: localhost:8848 #nacos地址
config:
file-extension: yaml #3:文件后缀名。
3:在controller中获得配置文件中拿到得数据
//加载nacos配置文件
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
private String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
在这里呢就会出现问题,视频中时在含有@Value 的controller加入@RefreshScope注解,但是再次运行项目,访问接口,就会出现空指针异常问题。
这里呢个人经过查阅资料,发现@RefreshScope他的默认代理方式是CGLIB,但是spring中默认的代理也是CGLIB,就相当于它被代理了两次,这样可能就会导致数据消失。
解决办法:
将@RefreshScope改为:@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)