1,版本信息
- springboot 2.2.0.RELEASE + nacos 2.2.3.RELEASE
2,操作步骤
创建好springboot项目。
添加nacos-config的maven依赖。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
- 在resources中新建bootstrap.yml,配置如下:
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
## 文件后缀
file-extension: yml
refresh-enabled: true
refresh:
enabled: true
application:
name: nacos-config-example
nacos:
config:
auto-refresh: true
- 启动nacos-server服务,浏览器访问http://localhost:8848/nacos进入管理界面如下:
-
在配置管理中添加data Id、GROUP,选择配置格式,这里选的是YAML格式的,并在配置内容中添加内容,如下图所示:
点击发布配置完成保存。
使用单元测试或新建controller,这里使用controller为例,添加注解@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)和注 入需要获取的配置内容,如下所示:
@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)//允许远程修改自动刷新
public class ConfigController {
private static final String SERVER_ADDR = "127.0.0.1:8848";
private static final String TEST_NAMESPACE = "public";
@NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
private boolean useLocalCache;
@Value(value = "${user.nickName}")
private String userName;
@GetMapping("/getUserName")
public String getUserName(){
return userName;
}
- 启动项目服务,访问:http://localhost:8080/config/getUserName 即可获取最新配置内容。
3,注意事项
- 更新配置后,无法获取最新内容,遇到这种问题有两种解决方案。
方案一:
- (1),检查bootstrap.yml配置信息中是否有 refresh-enabled: true, auto-refresh: true等信息。
- (2),controller上是否使用了注解@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
方案二:
- 新建一个配置类,同时使用@Configuration和@RefreshScope,在需要的地方注入该配置类即可