文章目录

前言一、统一配置管理Nacos操作二、统一配置管理java操作1.引入依赖2.创建配置文件3.测试4.总结

三、Nacos配置自动更新1.添加注解@RefreshScope2.使用@ConfigurationProperties注解3.总结

四、Nacos多环境配置共享1.配置文件2.多种配置的优先级3.总结

总结

前言

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

一、统一配置管理Nacos操作

在Nacos中添加配置信息: 在弹出表单中填写配置信息: 配置获取的步骤如下:

二、统一配置管理java操作

1.引入依赖

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

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-config

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文件,

解决办法:

org.springframework.cloud

spring-cloud-starter-bootstrap

3.0.2

导入依赖就可以了。

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配置管理的相关知识,希望对你有所帮助。 积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!

文章来源

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。