nacos入门(二)

 

目录

nacos实现配置管理

nacos实现配置

获取nacos中的配置步骤

 1.引入nacos的配置管理客户端依赖

2.在服务中resource目录添加一个bootstrap.yml文件

热更新和拉取nacos配置中的值

使用@Value注解拉取值,在对应类上添加@RefreshScope实现热更新

使用@ConfigurationProperties注解自定义对象数据拉取值

 多环境配置共享

1.创建多环境配置文件

 多种配置的优先级

线上配置高于本地配置,当前环境配置高于共享环境配置 


nacos实现配置管理

当我们需要一些服务实现统一的管理时,并切实现服务的热更新

  • 热更新:服务不用重启,就立马能够生效

比如:有十几个服务需要修改同一配置时,我们不需要修改十个服务的配置,而是在同一个地方改即可。

当微服务启动时就会去读取nacos中的配置,在和本地的配置结合进行使用

 在nacos中添加配置

 

nacos实现配置

获取nacos中的配置步骤

在读取nacos文件时,我们得知道nacos地址,但由于需要提前知道nacos配置,所以使用bootstrap来配置nacos地址。

原因:bootstrap.yml文件是引导文件比application.yml优先级高很多

所以大致步骤如下:服务启动之后从bootstrap中获取nacos配置文件的地址,然后拉取nacos中的配置文件在结合本地文件,再进行后面的操作。 

 1.引入nacos的配置管理客户端依赖

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

2.在服务中resource目录添加一个bootstrap.yml文件

在配置文件里面配置nacos地址,服务名称,环境,后缀(就相当于刚才nacos中的创建的配置文件的id)

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

热更新和拉取nacos配置中的值

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

使用@Value注解拉取值在对应类上添加@RefreshScope实现热更新

@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope//开启配置热更新
public class UserController {
    
    @Value("${pattern.dateformat}")//nacos配置文件中属性
    private String dateformat;
    
    @GetMapping("/test")
    public String test() {
        return dateformat;
    }
}

 效果:

 

使用@ConfigurationProperties注解自定义对象数据拉取值

@Data
@Component
@ConfigurationProperties(prefix = "pattern")//nacos配置文件中属性
public class PatternProperties {
    public String dateformat;
}

 注入PatternProperties对象

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private PatternProperties patternProperties;

    @GetMapping("/test")
    public String test() {
        return patternProperties.getDateformat();
    }
}

这种方式无需在类上添加@RefreshScope注解来实现热更新

 多环境配置共享

使用场景:当有一个配置属性在开发,生产,测试环境中的值相同,那么我们就没必要在每个配置文件中都写一份,如果到时候有改动那么我们还得把每个都去改一遍

在上述情况中我们就可以使用多环境配置共享,来统一多个环境中相同的配置

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

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

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

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件 

1.创建多环境配置文件

拉取nacos中配置属性值

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    public String dateformat;//开发环境中的属性
    public String envSharedValue;//多环境中共享的属性
}
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private PatternProperties patternProperties;

    @GetMapping("/test")
    public String test() {
        return patternProperties.getDateformat()
                +"<br>"+patternProperties.getEnvSharedValue();
    }
}

 开发环境中得到的结果:

测试环境中得到的结果:

 

 多种配置的优先级

线上配置高于本地配置,当前环境配置高于共享环境配置 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要取得Nacos配置中心中的List类型配置,需要使用Nacos提供的Java SDK,具体步骤如下: 1. 引入Nacos Java SDK的依赖,可以在Maven中添加如下依赖: ```xml <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${nacos.version}</version> </dependency> ``` 2. 在代码中使用Nacos SDK获取配置,示例代码如下: ```java import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.listener.Listener; import com.alibaba.nacos.api.exception.NacosException; import java.util.List; import java.util.Properties; import java.util.concurrent.Executor; public class NacosConfigExample { public static void main(String[] args) throws NacosException { String serverAddr = "localhost:8848"; // Nacos服务地址 String dataId = "example"; // 配置ID String group = "DEFAULT_GROUP"; // 配置分组 Properties properties = new Properties(); properties.put("serverAddr", serverAddr); ConfigService configService = NacosFactory.createConfigService(properties); String content = configService.getConfig(dataId, group, 5000); // 获取配置内容,超时时间为5000ms // 将List类型的配置转换为List对象 List<String> list = Arrays.asList(content.split(",")); // 监听配置变化 configService.addListener(dataId, group, new Listener() { @Override public void receiveConfigInfo(String configInfo) { // 配置变化后的处理逻辑 List<String> list = Arrays.asList(configInfo.split(",")); // ... } @Override public Executor getExecutor() { return null; } }); } } ``` 在获取配置之后,可以将List类型的配置内容转换为List对象进行处理。同时,可以使用addListener方法监听配置的变化,当配置发生变化时,会触发Listener中的回调函数,从而进行相应的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值