Nacos的安装可以看:SpringCloud安装Nacos_生骨大头菜的博客-CSDN博客

1、在nacos中添加配置

2、微服务中读取配置

因为项目启动时会先读取nacos的配置文件在读取application.yml配置文件,所以要读取nacao的配置还需要一个bootstrap.yml文件

读取配置的顺序是bootstrap.yml->nacaos配置文件->application.yml

需要在bootstrap.yml文件中配置nacos地址来读取nacos配置

user-service引入Nacos的管理客户端依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

新建bootstrap.yml文件

spring:
  application:
    name: userservice  # nacos的服务名称
  profiles:
    active: dev # 开发环境,这里是dev
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
      config:
        file-extension: yaml  # 文件后缀名

代码中使用配置

package com.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class UserController {

    @Value("${user.name}")
    private String userName;

    @GetMapping("/user/{id}")
    public String user(@PathVariable String id) {
        return "用户:" + id + "===========" + "配置的用户名:" + userName;
    }

}

重启服务并访问

配置生效了

3、配置的热更新

两种方式:

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

package com.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;


@RefreshScope
@RestController
public class UserController {

    @Value("${user.name}")
    private String userName;

    @GetMapping("/user/{id}")
    public String user(@PathVariable String id) {
        return "用户:" + id + "===========" + "配置的用户名:" + userName;
    }

}

方式二:使用@ConfigurationProperties注解

新建一个配置类

package com.demo.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 修改controller类

package com.demo.controller;

import com.demo.config.UserProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class UserController {

    @Autowired
    private UserProperties userProperties;

    @GetMapping("/user/{id}")
    public String user(@PathVariable String id) {
        return "用户:" + id + "===========" + "配置的用户名:" + userProperties.getName();
    }

}

重启user-service并测试

 完成,两种方式都可以成功

多环境配置共享

微服务启动时会从nacos读取多个配置文件:

[spring.application.name]-[ spring.profiles.active ]. yaml ,例如: userservice-dev.yaml
[spring.application.name]. yaml ,例如: userservice.yaml
无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件

注意事项:

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐