1.【服务注册框架2】nacos配置拉取

Nacos 配置管理

  • nacos不仅可以作为服务注册中心,还可以进行配置管理

1.为什么需要进行nacos进行配置管理?

  • :当注册到微服务的实例很多,逐个修改微服务实例的配置,会诱发高血压心脑血管疾病,所以使用注册中心nacos来集中管理所有微服务实例配置变得十分重要。

2.Nacos服务端添加配置流程:

  1. 在这里插入图片描述
  2. 在弹出的表单中填写信息配置
    在这里插入图片描述

2.2注意点:项目的核心配置,没必要使用nacos进行管理,热配置才有放到nacos管理的必要

3.如果尚未读取application.yml,又如何得知nacos地址,加载配置呢?

3.1spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

在这里插入图片描述

3.2 微服务(user-service)实例加载nacos配置步骤:

1.依赖

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. user-service 添加bootstrap.yml,内容如下:
spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev(nacos服务定义的dev命名空间)
  cloud:
    nacos:
      config:
      	prefix: ${spring.application.name} # 添加这项使用上面的name,不添加使用的是上面application.yml中的spring.application.name
        # 从nacos服务器dev空间userservice-dev.yaml 拉取配置文件
        server-addr: localhost:8848 # Nacos地址
        file-extension: yaml # 文件后缀名
        namespace: 92937209-6878-482c-ab7a-24de666d8985 # dev命名空间ID(一定要查看是否在对应的命名空间下的配置文件,否则拉取失败)
  1. 这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据,${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。

本例中,就是去读取userservice-dev.yaml:下图的server-addr有误,要在config下,否则获取不到地址
在这里插入图片描述

  1. 获取nacos配置
@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));
    }
    // ...略
}
  1. 效果
    在这里插入图片描述

4.nacos配置热更新(不需要重启微服务,就可以拉取配置)

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

@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));
    }
}

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

  • 在user-service服务中,添加一个类,读取patterrn.dateformat属性:
package cn.cheung.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中使用这个类代替@Value:
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private PatternProperties patternProperties;

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

5.配置共享

  • 在微服务启动是,回去nacos服务端,读取多个配置:
    • [spring.application.name]-[spring.profiles.active].yaml :如 userservice-dev.yaml
    • [spring.application.name].yaml : 如 userservice.yaml
  • [spring.application.name] 不包含环境配置,因此可以被多个环境共享

5.1使用步骤:

  1. 在nacos中添加一个userservice.yaml 文件:
    在这里插入图片描述
  2. 在user-service 中读取nacos中的配置文件,修改PatternProperties类,读取新添加的属性:
    在这里插入图片描述
  3. 在user-service服务中,修改UserController,添加一个方法:
    在这里插入图片描述
  4. 再开启一个不同环境的user-service,测试是否共享
    在这里插入图片描述
    在这里插入图片描述
    这样,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。

启动UserApplication和UserApplication2

访问http://localhost:8081/user/prop,结果:
在这里插入图片描述

访问http://localhost:8082/user/prop,结果:
在这里插入图片描述

可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。

5.2 配置共享优先级

  • 当nacos、服务本地同时出现相同属性时,优先级有高低之分:
    在这里插入图片描述

6.nacos搭建集群

6.1需要使用的时候再去查

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值