springboot读取nacos配置中心配置 您所在的位置:网站首页 url怎么读取 springboot读取nacos配置中心配置

springboot读取nacos配置中心配置

2024-07-02 07:34| 来源: 网络整理| 查看: 265

官方地址:https://nacos.io/zh-cn/docs/quick-start-spring-boot.html

示例:

项目内容如下:

一、nacos编辑配置文件

dataId:cloud.service-platform.mediaGroup:service-platform配置格式没用,只是增加一点颜色,方便编辑配置了一个port8081和urlhead=test

namespace(tenat):命名空间默认是 public 可以添加 dev prod test (相当于 第一层 互相隔离 每个命名空间下面有自己的组)group:组默认是DEFAULT_GROUP(组相当于一个特定场景 )dataid :相当于文件名 默认下是服务名(在每个分组下面互相隔离) 二、客户端 pom依赖 org.springframework.boot spring-boot-starter-web 2.2.4.RELEASE com.alibaba.boot nacos-config-spring-boot-starter 0.2.7 三、配置application.properties #nacos地址 nacos.config.server-addr=localhost:8848 #命名空间id nacos.config.namespace=ns-dev #用户名 nacos.config.username=nacos #密码 nacos.config.password=nacos

也可以去掉application.properties配置文件,改用从环境变量获取配置中心地址(下面两种方式)

//此代码加载启动类中 //第二种方式 /** * 动态配置配置中心地址。全局NacosProperties * @return Properties */ @Bean public Properties globalNacosProperties() { Properties properties = new Properties(); //properties.setProperty("serverAddr",System.getProperty("serverAddr"));//从环境变量获取后放入Properties properties.setProperty("serverAddr","localhost:8848"); properties.setProperty("username","nacos"); properties.setProperty("namespace","ns-dev"); properties.setProperty("password","nacos"); return properties; } public static void main(String[] args) { SpringApplication.run(DemoApplication.class,args); } //第三种方式 public static void main(String[] args) { //设置环境变量 System.setProperty("nacos.config.serverAddr","localhost:8848"); System.setProperty("nacos.config.username","nacos"); System.setProperty("nacos.config.namespace","ns-dev"); System.setProperty("nacos.config.password","nacos"); SpringApplication.run(DemoApplication.class,args); System.out.println("启动成功"); } 四、启动类添加@NacosPropertySource注解 @SpringBootApplication //设置配置源并开启自动更新 @NacosPropertySource(dataId = "cloud.service-platform.media",groupId = "service-platform",autoRefreshed = true) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } 五、controller通过@NacosValue注解取值 @RestController public class DemoController { //使用@value注解取值,它能取到值,但没有自动更新的功能 @Value(value = "${urlhead}") private String urlhead; //使用@nacosValue注解获取值,并开启自动更新 @NacosValue(value = "${urlhead}", autoRefreshed = true) private String urlheadAutoRefresh; @RequestMapping("/getValue") public String getValue() { System.out.println("urlhead:"+urlhead); System.out.println("urlheadAutoRefresh:"+urlheadAutoRefresh); return ""; } } 六、测试结果

结果可以看出@NacosValue是可以在nacos配置修改后,读取到新值的。但@Value不行。

 

客户端底层请求nacos配置的位置:

nacos是通过ClientWorker的getServerConfig方法get请求获取的配置文件信息

 

中途发生的一些小插曲

经检查发现:nacos客户端会把dataId当作文件名。但是客户端不支持media后缀名的配置文件

通过源码分析,发现nacos只支持四种配置解析器:

所以我们可以自定义类实现ConfigParse接口,然后通过SPI方式把类加进来

因为我dataId后缀名不符合要求,但是文件内容依然是Properties的格式,所以我们可以直接继承DefaultPropertiesConfigParse类即可

//自定义类实现ConfigParse接口 public class DefaultMediaConfigParse extends DefaultPropertiesConfigParse { @Override public String processType() { return "media"; } }

SPI步骤:

1、在classpath下创建两层META-INF/services/文件夹,里面添加文件,文件名为接口的全类路径名

注意:不要直接在idea上创建META-INF.services文件夹,因为创建的只是一层

2、在文件中加上实现类的全类路径名

java spi机制参考:https://blog.csdn.net/sumengnan/article/details/113243995

 

自定义解析器加入集合处源码

ConfigParseUtils类的toProperties方法中,会把自定义的配置解析器加入到默认解析器的properties集合里面。

现在就有五种解析器了,可以识别并解析media文件了!!

 

完事!  


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有