栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Spring Cloud Alibaba】nacos配置中心实践

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Spring Cloud Alibaba】nacos配置中心实践

一、项目搭建

在nacos注册中心实践,已经安装好了nacos,并且并且成功的将项目注册到了nacos中。接下来在实践下nacos做配置中心,首先来构建项目。

1、POM文件导入依赖


    
        spring-cloud-nacos
        com.lwb
        1.0.0-SNAPSHOT
    
    4.0.0

    nacos-config

    
        8
        8
    

    
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
    

2、主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@SpringBootApplication
@EnableDiscoveryClient
public class ApplicationNacosConfig {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationNacosConfig.class, args);
    }
}
3、controller书写
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RefreshScope
public class UserInfoController {

    @Value("${system.username}")
    private String username;

    @GetMapping("/get/username")
    public String getUsername() {
        return username;
    }
}

注意这里的@RefreshScope是动态刷新的注解。意思是当nacos配置中心的配置内容发生变化后,controller对配置中心变量的引用可以立即生效,而不需要重启服务。比如@Value("${system.username}")对system.username的引用,当配置中心修改了这个值会立即改变程序中的值。

4、配置文件 1、bootstrap.yml
spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.101.41:8848  #nacos作为注册中心地址
      config:
        server-addr: 192.168.101.41:8848 #nacos作为配置中心地址
        file-extension: yaml # 指定yaml的格式的配置
2、application.yml
spring:
  profiles:
    active: dev

server:
  port: 8809

为什么需要bootstrap.yml来写配置中心的信息。因为bootstrap.yml的优先级高于application.yml,程序在启动的时候,需要先知道nacos的服务端的基础信息,此时还没有到加载application.yml的时候。相当于初始引导,所以一定要有这个配置文件来配置nacos的基础信息。
现在我们将bootstrop.yml中的配置移动到application.yml中,启动看看会发生什么情况

可以看到,成序刚启动直接就报http://localhost:8848连接超时了。这是因为在bootstrop.yml中没有找到nacos服务端配置信息,默认使用localhost:8848导致的。

另一个需要注意的是这个配置:

spring:
  profiles:
    active: dev

知道springboot的都知道,这是表示dev模块的配置文件生效。然而我们从定义的配置文件来看,并没有定义dev模块。
实际上,因为我们使用的是nacos作为配置中心,因此这个dev不单单是指本地dev模块,会到nacos服务端去中dev服务模块。具体的查找规则是${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
spring.application.name定义的服务名

spring:
  application:
    name: nacos-config

spring.profile.active定义的生效模块

spring:
  profiles:
    active: dev

spring.cloud.nacos.config.file-extension配置文件类型后缀,就是nacos添加配置的时候选择的类型

实际上就是我们nacos中配置的Data ID

因此在本实例中,得到的结果就是nacos-config-dev.yaml。下面我们看看nacos配置服务端到底是怎么配置的。

二、配置定义

在上面描述中,本实例向nacos服务端添加了两个配置文件

当在开发环境的时候,可以选择dev配置文件。当在测试环境的时候,可以切换到test配置文件,仅仅需要指定下spring.profile.active即可
nacos-config-dev.yaml配置内容为:

system:
  username: laiwenbo-dev

nacos-config-test.yaml配置内容为:

system:
  username: 隐市高手-test

首先我们按照spring.profile.active=dev启动项目,访问controller中的/get/username接口

修改spring.profile.active=test启动项目后访问

三、group分组方案

在nacos中配置中心,还可以根据分组来定位到底使用哪一个文件

比如定义了两个Data Id 为nacos-config-test.yaml的配置文件,但是由于他们的group不同,所以我们只需要在bootstrap.yaml中指定对应的group即可

四、nacos空间命名方案

在nacos的命名空间新建,会自动生成一个命名空间ID,将ID写到配置文件中即可。别的配置同上面的逻辑一直。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/877278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号