Nacos配置管理

 

一、在Nacos添加公共配置

 

 

 

二、项目中读取方式

1. 引入nacos-config依赖

首先,在要使用 nacos 来管理配置的服务中,引入nacos-config 依赖:

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

 

2. 添加 bootstrap.yaml

在项目中添加一个 bootstrap.yaml 文件,这个文件是引导文件,优先级高于 application.yml,内容如下:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名
  • 首先根据 spring.cloud.nacos.server-addr 获取 nacos 地址
  • 然后根据 `${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}` 作为文件id,来读取配置
  • 本例中,就是去读取`userservice-dev.yaml`
  • 注意,bootstrap.yaml 中的配置不要与 application.yml 文件中重复,如果两个文件同时使用,则应删除 application.yml 中与 bootstrap.yaml 文件重复的配置

 

三、测试配置是否生效

import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
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.*;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Value("${pattern.dateformat}")
    private String dateformat;

    /**
     * 路径: /user/110
     *
     * @param id 用户id
     * @return 用户
     */
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        return userService.queryById(id);
    }

    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
}

 

四、配置热更新

1. 方式一:在项目中用到配置的类上添加注解 @RefreshScope

import org.springframework.cloud.context.config.annotation.RefreshScope;

@RefreshScope
public class 。。。{

}

 

2. 方式二:使用 @ConfigurationProperties 注解代替 @Value 注解

1)如果出现警告,则补充依赖即可

 补充下面依赖:

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

2)具体使用方式

添加 PatternProperties 配置类

package cn.itcast.user.config;

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

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {

    private String dateformat;

}

 

使用配置类中的配置

import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import cn.itcast.user.config.PatternProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
@RestController
@RequestMapping("/user")
//@RefreshScope
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private PatternProperties properties;

    /**
     * 路径: /user/110
     *
     * @param id 用户id
     * @return 用户
     */
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        return userService.queryById(id);
    }

    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
    }
}

 

五、多环境配置共享

1. 如何添加多环境配置

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

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml

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

 

 

2. 多个配置文件之间的优先级

从高到底分别是:服务名-profile.yaml > 服务名.yaml > 本地配置(application.yml)

 

 六、多服务共享配置

1.  配置方式

不同微服务之间可以共享配置文件,通过下面的两种方式来指定:

方式一:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev # 环境,
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config: 
        file-extension: yaml # 文件后缀名
        shared-configs: # 多微服务间共享的配置列表
          - dataId: common.yaml # 要共享的配置文件id

方式二:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名
        extension-configs: # 多微服务间共享的配置列表
          - dataId: extend.yaml # 要共享的配置文件id

 

 2. 多种配置的优先级

 

 

 

 

 

* 注:学自黑马

posted @ 2021-11-09 20:15    阅读(345)  评论(0编辑  收藏  举报