美文网首页Spring Boot
Spring Cloud Alibaba Nacos Conf

Spring Cloud Alibaba Nacos Conf

作者: xiaotian是个混子 | 来源:发表于2019-08-21 11:11 被阅读0次

    前言

    前面我们学习了如何在Spring Boot中使用Nacos来管理配置,整体来说还是比较简单。

    为了能够在Spring Cloud中更加方便的使用Nacos,今天介绍下在Spring Cloud中如何简单,快速,方便的使用Nacos。

    使用

    需要在项目中加入spring-cloud-starter-alibaba-nacos-config的Maven依赖。

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencyManagement>
        <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Greenwich.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
        </dependencies>
    </dependencyManagement>
    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.9.0.RELEASE</version>
     </dependency>
     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>0.9.0.RELEASE</version>
    </dependency>
    

    开始Config

    在bootstrap.properties中配置Nacos的信息,切记是bootstrap.properties不是application.properties,原因你可以自己体验下.

    # 应用名
    spring.application.name=crtxr-gateway
    #nacos地址(配置中心)
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    #nacos地址(注册中心)
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    # 配置内容的数据格式
    spring.cloud.nacos.config.file-extension=yaml
    # 指定对应的环境
    spring.profiles.active=dev
    

    在 Nacos Spring Cloud 中,dataId 的完整格式如下:
    ps:这里很容易踩坑(命名错误导致应用获取不到配置)

    ${prefix}-${spring.profile.active}.${file-extension}
    

    prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

    然后我们在Nacos的后台创建一个配置,dataId为crtxr-gateway-dev.yaml

    nacos: crtxr
    

    测试代码:

    @RestController
    @RequestMapping("/config")
    @RefreshScope
    public class ConfigController{
    
    @Value("${nacos:false}") 
    private String nacos;
    
    @RequestMapping("/get")  
    public String get(){      
           return nacos;  
        }
    }
    

    配置变更需要刷新的话记得加上@RefreshScope注解。加载对应环境的配置是根据spring.profiles.active的值进行加载,
    方便的点在于不用启动时指定namespace来区分环境,而是跟Spring Boot中的spring.profiles.active进行了整合。这样的方式还是只有默认的namespace,只不过是通过data-id的命名规则来区分环境。

    至此Config可以正常使用了


    多Data-Id的使用

    如果我们需要加载多个配置文件,可以用ext-config来配置(数组形式配置多个)

    #这里我再加载一个prod环境的依赖(`配置内容的数据格式可以使用其他的`)
    spring.cloud.nacos.config.ext-config[0].data-id=crtxr-gateway-prod.properties
    spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
    spring.cloud.nacos.config.ext-config[0].refresh=true
    

    共享配置

    通过上面加载多个配置的实现,实际上我们已经可以实现不同应用共享配置了。但是Nacos中还提供了另外一个便捷的配置方式,比如下面的设置与上面使用的配置内容是等价的:

    spring.cloud.nacos.config.shared-dataids=crtxr-gateway-sit.properties
    spring.cloud.nacos.config.refreshable-dataids=crtxr-gateway-sit.properties
    

    spring.cloud.nacos.config.shared-dataids参数用来配置多个共享配置的Data Id,多个的时候用用逗号分隔
    spring.cloud.nacos.config.refreshable-dataids参数用来定义哪些共享配置的Data Id在配置变化时,应用中可以动态刷新,多个Data Id之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置都不支持动态刷新

    配置加载的优先级

    当我们加载多个配置的时候,如果存在相同的key时,我们需要深入了解配置加载的优先级关系。

    在使用Nacos配置的时候,主要有以下三类配置:

    A: 通过spring.cloud.nacos.config.shared-dataids定义的共享配置
    B: 通过spring.cloud.nacos.config.ext-config[n]定义的加载配置
    C: 通过内部规则(spring.cloud.nacos.config.prefixspring.cloud.nacos.config.file-extensionspring.cloud.nacos.config.group这几个参数)拼接出来的配置
    要弄清楚这几个配置加载的顺序,我们从日志中也可以很清晰的看到,我们可以做一个简单的实验:

    #这里我再加载一个prod环境的依赖(配置内容的数据格式可以使用其他的)
    spring.cloud.nacos.config.ext-config[0].data-id=${spring.application.name}-prod.properties
    # 配置组(默认DEFAULT_GROUP)
    spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
    #是否自动刷新
    spring.cloud.nacos.config.ext-config[0].refresh=true
    
    #共享配置DataIds
    spring.cloud.nacos.config.shared-dataids=${spring.application.name}-sit.properties
    #开启自动刷新
    spring.cloud.nacos.config.refreshable-dataids=${spring.application.name}-sit.properties
    

    根据上面的配置,应用分别会去加载三类不同的配置文件,启动应用的时候,将会在日志中看到如下输出:

    2019-08-21 10:35:44.924  INFO 18512 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : 
    Loading nacos data, dataId: 'crtxr-gateway-sit.properties', group: 'DEFAULT_GROUP'
    2019-08-21 10:35:44.928  INFO 18512 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : 
    Loading nacos data, dataId: 'crtxr-gateway-prod.properties', group: 'DEFAULT_GROUP'
    2019-08-21 10:35:44.935  INFO 18512 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : 
    Loading nacos data, dataId: 'crtxr-gateway-dev.yaml', group: 'DEFAULT_GROUP'
    

    后面加载的配置会覆盖之前加载的配置,所以优先级关系是:A < B < C

    开始Discovery

    在启动类添加@EnableDiscoveryClient注解

    @SpringBootApplication
    @EnableDiscoveryClient
    public class GateWayApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(GateWayApplication.class, args);
        }
    }
    

    验证

    • 启动服务检查控制台是否有异常
    • 登录Nacos控制台查看注册上的服务列表了
    image.png

    至此Nacos最主要的两大功能演示完毕

    相关文章

      网友评论

        本文标题:Spring Cloud Alibaba Nacos Conf

        本文链接:https://www.haomeiwen.com/subject/oqrusctx.html