Nacos统一配置管理

Nacos

统一配置管理

将一部分配置信息写到Nacos配置文件中,可以统一管理,并且这个文件支持热加载。

新建配置步骤:配置管理 -> 配置列表 -> 新建配置
Data ID(配置文件名id) 命名规范:服务名称-dev(profile运行环境).yaml
Group(分组) :DEFAULT_GROUP

原先后端启动的步骤是:

  1. 项目启动
  2. 读取本地配置application.yml
  3. 创建spring容器
  4. 加载bean

现在要从Nacos中读取配置文件,而次操作必须要在读取本地配置文件之前。
那么获取Nacos地址的配置就要在application.yml之前进行
所以需要建立一个优先级比application.yml优先级更高的配置文件:bootstrap.yml并将Nacos地址的配置信息写进去。

操作
第一步:引入Nacos的配置管理客户端依赖


<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>

第二步:新建bootstrap.yml引导文件,将服务名,nacos地址,环境,等信息写到里面

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #环境
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos 地址
      config:
        file-extension: yaml # 文件后缀
      discovery:
        cluster-name: HB # 集群名称

第三步:后端想要获取该配置信息,可以通过@Value("${}")的方式获取

@Value("${pattern.dateformat}")
private String dateformat;
/**
 * 获取当前时间
 * @return
 */
@GetMapping("/now")
public String now(){
    return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}

配置热更新

Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:

方式一:在@Value注入的变量所在类上添加注解@RefreshScope

@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
    @Value("${pattern.dateformat}")
    private String dateformat;
    /**
     * 获取当前时间
     * @return
     */
    @GetMapping("/now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
}

方式二:新建一个配置类,使用@ConfigurationProperties注解

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
	private String dateformat;
}

注意:

  • 不是所有的配置都适合放到配置中心,维护比较麻烦
  • 建议将一些关键参数,需要运行时调整的参数放到Nacos配置中心,一般都是自定义配置。

你可能感兴趣的:(Spring,spring,cloud)