承接上一篇文章,我们来继续学习nacos的另一个功能,配置中心。
新建配置
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
- prefix 默认为
spring.application.name
的值,也可以通过配置spring.cloud.nacos.config.prefix
来配置。 - spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成
${prefix}.${file-extension}
- file-exetension 为配置内容的数据格式,可以通过配置项
spring.cloud.nacos.config.file-extension
来配置。目前只支持 properties 和 yaml 类型。
配置@RefreshScope
通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
测试代码
主要代码
@RefreshScope
@RequestMapping(value = "/producer")
@RestController
public class ProducerController {
@Value(value = "${server.port}")
private String port;
@Value("${ossa.info}")
private String config;
@GetMapping("/{id}")
// @SentinelResource(value = "producerById", fallback = "error")
public ResponseEntity<ProducerVO> producerById(@PathVariable(value = "id") String id) {
ProducerVO producerVO = new ProducerVO();
producerVO.setId(id);
producerVO.setPort(port + ": " + UUID.randomUUID().toString());
producerVO.setConfigBody(config);
return ResponseEntity.ok(producerVO);
}
spring:
application:
name: ossa-service-producer
cloud:
nacos:
# docker启动nacos:
# docker run --name mynacos -itd -e MODE=standalone -p 8848:8848 -p 9848:9848 -p 9849:9849 nacos/nacos-server:v2.0.3
discovery:
server-addr: ip:8848
namespace: 78e10147-ff76-4e56-8b19-2e2bbd39f750
group: OSSA_GROUP
config:
server-addr: ip:8848
file-extension: yml
refresh-enabled: true
group: OSSA_GROUP
namespace: 78e10147-ff76-4e56-8b19-2e2bbd39f750