Nacos除了可以做注册中心,同样可以做配置管理来使用。
当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
在配置管理-配置列表中,点击加号,填写对应的表单
在对应的服务中,引入nacos-config的客户端依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在对应的服务的resources中添加一个bootstrap.yaml文件,内容如下:
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
在服务中的Controller中添加业务逻辑,读取pattern.dateformat配置:
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新。
方式一:在@Value注入的变量所在类上添加注解@RefreshScope:
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("/now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
}
方式二:使用@ConfigurationProperties注解代替@Value注解。
在服务中,添加一个类,读取patterrn.dateformat属性:
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
在Controller中使用这个类代替@Value
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private PatternProperties patternProperties;
@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
}
}
注意事项:
配置文件的命名和存放位置要符合Nacos的要求。Nacos默认将配置文件按照dataId进行存储,所以要确保dataId的唯一性,同时要遵循一定的命名规范。
配置文件的格式要正确。Nacos支持多种配置文件格式,如properties、yaml、json等。要确保配置文件的格式正确且能被Nacos解析。
配置文件的内容要根据场景进行合理的划分。可以将具有共同特性的配置项放在同一个配置文件中,并遵循一定的层级关系,以方便管理和维护。
配置文件的修改要谨慎。一旦配置文件被修改后,可能会影响系统的正常运行。在修改配置文件时,要确保修改的内容是正确的,并且要进行相应的测试和验证。
配置文件的权限管理要合理设置。Nacos支持配置文件的权限管理,可以根据不同用户或角色设置不同的权限,以保证配置文件的安全性。
配置文件的版本管理要做好。Nacos支持配置文件的版本管理功能,可以方便地进行配置文件的回滚和恢复。在管理配置文件时,要注意及时备份和管理版本。