相关推荐recommended
读取nacos文件的方式
作者:mmseoamin日期:2024-02-06

读取nacos的配置文件的方式

文章目录

  • 读取nacos的配置文件的方式
  • 前言
  • 一、使用SDK的方式去读取
  • 二、使用Spring来读取配置文件
  • 三、使用SpringBoot来读取配置文件
  • 四、使用SpringCloud来读取配置文件
  • 五、读取多个配置文件
  • 总结

    前言

    今天学习了一下从SDK到SpringCloud的各种方式去读取nacos文件。记下来供以后使用。


    一、使用SDK的方式去读取

    1. 在pom.xml里面引入nacos.client的包。代码如下:
    
                com.alibaba.nacos
                nacos-client
                2.0.4
     
    

    这里默认你已经使用了spring启动所必要的包。

    1. 在一个可以实现交互的方法(Controller类方法也好,junit测试方法也行)的内部使用nacosFactory创建configService对象,然后调用getConfig方法输入nacos地址、dataId以及连接超时的阈值即可获得整个配置文件的内容,类型是String。代码如下:
    public void getNacosInfo() {
            String url = "http://localhost:8848/nacos";// nacos地址
            String dataId = "application-dev.yml";// nacos配置文件的名字
            String group = "DEFAULT_GROUP";// 所属组,一般默认,不需要你填
            try {
                Properties properties = new Properties();//为了将地址传入configService而创建的对象,人家方法要这类型
                properties.put("serverAddr", url);
                ConfigService configService = NacosFactory.createConfigService(properties);
                String config = configService.getConfig(dataId, group, 5000);
                // System.out.println(config);
    //            
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    1. 该方法还能实现监听功能,即一旦nacos的配置文件发生变化,你能够知道且能够做出相应的动作。代码如下:
    // 监听application-dev.yml文件,一旦发生变换,在控制台输出
    configService.addListener(dataId, group, new Listener() {
                    @Override
                    public Executor getExecutor() {
                        return null;
                    }
                    @Override
                    public void receiveConfigInfo(String s) {
                        System.out.println(s);
                    }
                });
    

    二、使用Spring来读取配置文件

    1.在pom.xml中引入nacos-spring-context包,代码如下(示例):

    
                com.alibaba.nacos
                nacos-spring-context
                1.1.1
    
    
    1. 在启动类的class上加上注解@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = “http://localhost:8848/nacos”))以及@NacosPropertiesSource(dataId = “application-dev.yml”)。就是用注解的形式代替来之前的输入nacos地址和dataId。代码如下(示例):
    @EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "http://localhost:8848/nacos"))
    @NacosPropertySource(dataId = "application-dev.yml", autoRefreshed = true)
    @RestController
    public class WebApplication {
        @RequestMapping("/meg", method = RequestMethod.GET)
        public String getInfo() {
            // NacosConfigration是个配置类,扫描了NacosInfo类,创建了NacosIndo的Bean。
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(NacosConfigration.class);
            // nacosInfo类在下面
           NacosInfo nacosInfo = context.getBean(NacosInfo.class);
           return nacosInfo.getdataId();
        }
    }
    

    3.使用@value注解的形式读取你想要的配置文件,代码如下(示例):

    @Component
    public class NacosInfo {
        @Value("${feign.sentinel.enabled}")
        private String dataId;
        public String getdataId(){
            return dataId;
        }
    }
    

    三、使用SpringBoot来读取配置文件

    1.在pom.xml中引入nacos-config-spring-boot-starter包,代码如下(示例):

    
                com.alibaba.boot
                nacos-config-spring-boot-starter
                0.2.12
    
    

    2.因为该包包含了Spring注解部分的内容,所以直接使用Spring的注解方式也是行得通的,直接声明在启动类上就行。这里主要是使用application.properties的方式去实现,代码如下(示例):

    nacos.config.server-addr=127.0.0.1:8848
    nacos.config,dataId=application-dev.yml
    

    3.使用@value注解的形式读取你想要的配置文件,代码如下(示例):

    @Component
    public class NacosInfo {
        @Value("${feign.sentinel.enabled}")
        private String dataId;
        public String getdataId(){
            return dataId;
        }
    }
    

    四、使用SpringCloud来读取配置文件

    1.在pom.xml中引入spring-cloud-starter-alibaba-nacos-config包,代码如下(示例):

    
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-config
                2.2.8.RELEASE
    
    

    2.这里使用bootstrap.properties来配置nacos的地址和dataId。除此之外,还可以配置查找文件的匹配方式。注意:这里的包没有包含注解方式的内容,所以如果你想继续使用注解的方式,你需要引入Spring方式的包,代码如下(示例):

    spring.cloud.nacos.server-addr=127.0.0.1:8848 // nacos地址
    spring.application.name=test //查找的文件名
    spring.profiles.active=dev //匹配的变量
    spring.cloud.nacos.config.file-extension=yml //匹配的后缀名
    

    这里直接看,可能看不懂,所以还要介绍点东西:

    1.首先,springcloud会默认匹配spring.application.name为文件名。

    2.然后,它会去找spring.application.name + 后缀名 的文件,后缀名默认是properties。举个例子,我如果不声明yml,那么它会默认找test.properties文件。

    3.最后, 它会去找spring.application.name + “-” + spring.profiles.active + 后缀名 的文件。这里的话,它会去找test-dev.yml文件。

    当你想要的值在这三个文件中都存在时,它去找的优先级是3 -> 2 -> 1。

    3.使用@value注解的形式读取你想要的配置文件。值读到后直接自动装配对象,调用即可。代码如下(示例):

    @Component
    public class NacosInfo {
        @Value("${feign.sentinel.enabled}")
        private String dataId;
        public String getdataId(){
            return dataId;
        }
    }
    

    五、读取多个配置文件

    这里我默认使用SpringCloud的方式读取多个配置文件。除了读取多个配置文件以为,用法与SpringCloud一致。

    使用bootstrap.properties来配置nacos的地址和dataId。在读取主配置文件之外,加上若干个其他的配置文件,代码如下(示例):

    // 主配置文件设置
    spring.cloud.nacos.server-addr=127.0.0.1:8848 //nacos地址
    spring.application.name=test //主配置文件名
    spring.profiles.active=dev //匹配变量
    spring.cloud.nacos.config.file-extension=yml //后缀名,同时也将读取到的文件转换成yml文件类型
    // 其他配置文件设置
    spring.cloud.nacos.config.extension-configs[0].data-id=application-dev.yml //其他文件名
    // spring.cloud.nacos.config.shared-configs[0].data-id=application-dev.yml //与上一条功能一样
    spring.cloud.nacos.config.extension-configs[0].file-extension=yml //其他文件后缀名
    

    这里添加其他配置文件有两种方式,一种是shared-configs,另一种是extension-configs。功能是一样的。区别在于extension-configs的优先级更高。但它们都低于主配置。shared-configs代表的含义是该配置文件有其他服务会使用。而extension-configs则是只有自己会使用,其他服务不会使用。


    总结

    记录读取nacos文件的各种方式,后续会加上注册nacos的部分。