• 学习spring cloud记录9nacos深一步学习


    前言

    统一配置管理将各个服务的配置管理起来,如果发生变化,可以主动向服务发送信息。配置管理服务也在nacos中。

    配置热更新

    在配置列表新建配置

     

    发布后,这个配置已经进入统一配置管理

    服务配置拉去

    项目先读取nacos的配置文件,然后再读取本地的配置文件。bootstrap.yml文件要比application.yml的优先级高,所以可以把nacos的地址等信息文件内容移到bootstrap.yml

    引入nacos配置管理依赖

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

    然后新建bootstrap.yml文件,配置nacos信息,然后把application.xml重复的信息删除

    spring:
      application:
        name: demo-user
      profiles:
        active: dev
      cloud:
        nacos:
          server-addr: localhost:8848
          config:
            file-extension: yaml

    测试是否能够读取到nacos信息

    先查看nacos中的配置是什么样的

    名称为demo-user-dev.yaml,内容为

    pattern:
      dateformat: yyyy-MM-dd HH:mm:ss

    启动时报错Param 'serviceName' is illegal, serviceName is blank,因为spring-cloud-dependencies 2020.0.0 版本不在默认加载bootstrap 文件,如果需要加载bootstrap 文件需要手动添加依赖。

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

    在controller写一个读取配置文件的方法

        @Value("${pattern.dateformat}")
        private String dataformat;
    
        @GetMapping("now")
        public String now(){
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
        }

    运行后获得

     说明nacos配置文件已经读取到本地

    配置热部署

    方式一

    在@Value的类上添加注解@RefreshScope

    @RestController
    @RequestMapping(value = "user")
    @RefreshScope
    public class SysUserController {
        @Value("${pattern.dataformat}")
        private String dataformat;
    
    ...

    这样直接去nacos中修改配置,发布后不用重启服务

    方式二

    使用注解@ConfigurationProperties

    新建一个类,专门完成属性加载

    package priv.sinoam.demouser.config;
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    /**
     * 加载nacos配置类
     * @author hasee
     */
    @Data
    @Component
    @ConfigurationProperties(prefix = "pattern")
    public class Pattern {
    
        private String dateformat;
    }

    @Component将其注册成spring的一个bean,prefix和变量名要和配置文件中一致,将代码修改为

    @RestController
    @RequestMapping(value = "user")
    public class SysUserController {
    
        @Autowired
        private SysUserService sysUserService;
    
        @Autowired
        private Pattern pattern;
    
        @GetMapping("now")
        public String now(){
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(pattern.getDateformat()));
        }

    这样直接去nacos中修改配置,发布后不用重启服务

    多环境配置共享

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

    [spring.application.name]-[spring.profiles.active].yaml,即和服务名跟环境有关系

    [spring.application.name].yaml,即只和服务名有关系

    所以可以将配置文件放在下面这个配置文件中。

    所以在nacos新建配置时,使用服务名.yanl即可,在本项目中例如demo-user.yaml

    优先级:服务名-active.yaml>服务名.yaml>本地配置

     

    结语

    :)

  • 相关阅读:
    [转]编程能力与编程年龄
    github for windows 使用
    github 改位置
    Linux下设置和查看环境变量
    Docker基础 :网络配置详解
    docker入门实战笔记
    Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建
    使用nsenter工具进入Docker容器
    Docker从入门到实战(四)
    Docker从入门到实战(三)
  • 原文地址:https://www.cnblogs.com/lgqrlchinese/p/16155851.html
Copyright © 2020-2023  润新知