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

【Spring Cloud Alibaba】nacos配置中心实践,第1张

一、项目搭建

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

1、POM文件导入依赖

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-nacosartifactId>
        <groupId>com.lwbgroupId>
        <version>1.0.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>nacos-configartifactId>

    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>

    <dependencies>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
    dependencies>
project>
2、主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author 隐市高手
 * @date 2022/5/11 6:44
 */
@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;

/**
 * @author 隐市高手
 * @date 2022/5/11 6:51
 */
@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 Idnacos-config-test.yaml的配置文件,但是由于他们的group不同,所以我们只需要在bootstrap.yaml中指定对应的group即可

四、nacos空间命名方案

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/919946.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存