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

前言

统一配置管理将各个服务的配置管理起来,如果发生变化,可以主动向服务发送信息。配置管理服务也在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>本地配置

 

结语

:)

posted @ 2022-04-17 15:26  龙谷情Sinoam  阅读(97)  评论(0编辑  收藏  举报
Smiley face