微服务之Nacos配置管理


前言

一、统一配置管理Nacos操作
二、统一配置管理java操作
1.引入依赖
2.创建配置文件
3.测试
4.总结
三、Nacos配置自动更新
1.添加注解@RefreshScope
2.使用@ConfigurationProperties注解
3.总结
四、Nacos多环境配置共享
1.配置文件
2.多种配置的优先级
3.总结

一、统一配置管理Nacos操作

在这里插入图片描述在Nacos中添加配置信息:
在这里插入图片描述
在弹出表单中填写配置信息:
在这里插入图片描述
配置获取的步骤如下:
在这里插入图片描述


二、统一配置管理java操作

1.引入依赖

引入Nacos的配置管理客户端依赖:

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

2.创建配置文件

在user-service(客户端服务提供者)中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml:

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

注意!!!
SpringCloud 2.4版本之后不再优先读取bootstrap文件,这问题折磨我一天,一直读取不到bootstrap.yml文件,

解决办法:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bootstrap</artifactId>
  <version>3.0.2</version>
</dependency>

导入依赖就可以了。

3.测试

我们在user-service(客户端服务提供者)中将pattern.dateformat这个属性注入到UserController中做测试:
完整代码:

package cn.itcast.user.web;

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.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;
    
    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
    // ...略
}

结果如下:
在这里插入图片描述

4.总结

在这里插入图片描述

三、Nacos配置自动更新

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

1.添加注解@RefreshScope

在这里插入图片描述
完整代码如下:

package cn.itcast.user.web;

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")
@RefreshScope
public class UserController {


    @Autowired
    private UserService userService;


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

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

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

2.使用@ConfigurationProperties注解

在这里插入图片描述

完整代码如下

package cn.itcast.user.config;

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

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

UserController.java

package cn.itcast.user.web;

import cn.itcast.user.config.PatternProperties;
import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
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")
//@RefreshScope
public class UserController {


    @Autowired
    private UserService userService;


//    @Value("${pattern.dateformat}")
//    private String dateformat;
    @Autowired
    private PatternProperties properties;

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

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

3.总结

在这里插入图片描述

四、Nacos多环境配置共享

1.配置文件

其实微服务启动时,会去nacos读取多个配置文件,例如:

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

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

在这里插入图片描述

2.多种配置的优先级

在这里插入图片描述

3.总结

在这里插入图片描述

总结

以上就是微服务之Nacos配置管理的相关知识,希望对你有所帮助。
积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!

相关推荐

  1. 服务配置nacos

    2024-03-24 14:00:06       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 14:00:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 14:00:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 14:00:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 14:00:06       20 阅读

热门阅读

  1. 【单点知识】基于实例详解PyTorch中的DataLoader类

    2024-03-24 14:00:06       21 阅读
  2. Python文件

    2024-03-24 14:00:06       16 阅读
  3. Python 3 教程(8)

    2024-03-24 14:00:06       19 阅读
  4. Vue-Loader是什么? 使用他的用途有哪些?

    2024-03-24 14:00:06       21 阅读
  5. 蓝桥杯 积木画 (dp)

    2024-03-24 14:00:06       24 阅读
  6. C#面:什么是 NuGet

    2024-03-24 14:00:06       19 阅读
  7. 富格林:利用可信技巧租阻止暗箱陷阱

    2024-03-24 14:00:06       20 阅读
  8. Kafka系列之:Connect 中的错误报告

    2024-03-24 14:00:06       22 阅读