springboot读取nacos配置中心配置 | 您所在的位置:网站首页 › url怎么读取 › springboot读取nacos配置中心配置 |
官方地址: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 实验室设备网 版权所有 |