irpas技术客

SpringBoot集成nacos实现统一配置中心_小大宇_springboot集成nacos

网络 7699

导入依赖

咳咳,划重点,从导入依赖开始,坑就已经来了,哈哈!!!

导入的依赖很有讲究,你是啥springboot版本,然后下面的nacos版本配置就是啥,我也是醉啦。详情看我的配置,我的springboot版本是2.2.6.RELEASE,然后我的nacos版本也是2.2.6.RELEASE。

我强烈建议兄弟你先按照我的springboot版本来,等看完本篇文章后你再切换成你自己的springboot也不迟。

下面罗列了关键的nacos依赖配置及springboot的版本。

<!-- Spring Boot 启动父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.6.RELEASE</version> </dependency> </dependencies> 创建命名空间

"命名空间"视为项目。

下载好nacos服务器,我下载的版本是nacos1.1.4。启动 nacos服务器后,创建第一个命名空间"MY_PROJECT"。

这个命名空间专门用于给某个项目专用,刚创建的命名空间的ID是"3dab7b44-83fa-429a-8496-528986c6f54a",记住这个命名空间的id,待会要用到。

创建启动分支分组

项目的配置文件空间创建好了,下一步就是创建不同的开发分支。正常会有dev、test、pro分支。

这个分支在nacos中对应的概念就是"Group"。我们简单理解就是开发环境,例如dev、test、pro。

如下图,我们点击"MY_PROJECT",到我们这个项目的统一配置中心来,目前还没有任何配置。

我们尝试创建dev环境的分组。如下图,创建dataId为 "demo.properties",group为"dev"的第一个配置文件。配置文件的内容是指定端口为8081,然后自定义一个"author=dayu"的变量,详情请看下图。

这个过程就像我们在以前的application.yaml中配置的那样。配置完后点击"发布" 就好啦。

?

配置完返回并查看,点击MY_PROJECT命名空间下,我们就配置好了一个dataId是demo.properties的配置文件,且该配置文件属于分组dev,我们把它设计为开发环境需要的参数。未来可以增加更多的分组对应不同的环境,例如test环境、pro环境。

该demo.properties文件的内容很简单,就是"server.port=8081",还有"author=dayu"

代码接入nacos

我们在springboot工程中创建一个bootstrap.properties文件,它的加载优先级是最高的。配置详情如下:

# 我是bootstrap.properties配置文件 #服务器地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #项目的命名空间的ID,每个人的都不一样 spring.cloud.nacos.config.namespace=3dab7b44-83fa-429a-8496-528986c6f54a #当前的Group,配置的是啥Group,读取的就是啥group下的配置文件 spring.cloud.nacos.config.group=dev #配置文件的文件后缀 spring.cloud.nacos.config.fileExtension=properties #项目名称 spring.application.name=demo

spring.cloud.nacos.config.server-addr,nacos服务器地址

spring.cloud.nacos.config.namespace,读取的命名空间,就是本文一开始的那个命名空间的id。

spring.application.name=demo,设计我们的项目名称是"demo"。

spring.cloud.nacos.config.fileExtension ,配置文件的文件后缀设计为"properties"。

spring.cloud.nacos.config.group=dev。读取group为dev的配置文件

这段在bootstrap.properties中的配置究竟功能是什么呢?我总结了一段话来描述:?

让我们去读取指定 nacos服务器下的指定的命名空间中的配置文件。这个配置文件的ID 是? ${spring.application.name}.${spring.cloud.nacos.config.fileExtension},且它的group是${spring.cloud.nacos.config.group}。

用配置文件替换上面的这段话:

让我们去读取指定 nacos服务器下的指定的命名空间中的配置文件。这个配置文件的DataId 是? demo.properties,且它的group是dev。

再回头看看我们的配置文件,确实就是DataId = demo.properties、Group=dev

?启动项目:

控制台打印:

?控制台说明加载dataId[demo],默认后缀是properties被省略掉了,group是dev。说明正确。

配置文件中规定了启动端口是8081,项目真的按照了8081端口启动了耶!!!说明了我们已经读取到了nacos统一配置平台的配置。

?加载多个配置

在项目中创建application.yaml文件,配置启动分支以dev分支启动。

再次启动项目,除了之前based on dataId[demo] ,我们看到控制台上显示:based on dataId[demo-dev.properties] 。这就说明nacos除了刚才加载的dataId=demo.properties文件,另外还根据启动分支,也尝试去读取?

${spring.application.name}-${启动分支}.${spring.cloud.nacos.config.fileExtension} ,即demo-dev.properties文件。

于是我们顺水推舟,在nacos上创建dataId为[demo-dev.properties] ,同时配置GroupId为dev,如下图,切记别忘了配置分组!!!

配置的内容就配一个 age=26 吧。兄弟,看这里,别漏了age变量的配置,下面做测试要用到的哦。

?返回并查看,现在就有两个配置了。

代码验证

我们写一个Controller试试看,这里代码中需要加上 @RefreshScope 注解,注解作用就是当nacos中的配置文件更新的时候,同步更新到代码中!!!? 启动后不要关闭项目哈!

@RestController @RequestMapping(value = "/") @RefreshScope public class HelloController { @Value("${author}") private String author; // 在demo.properties文件中配置了 @Value("${age}") private String age; // 在demo-dev.properties文件中配置了 @GetMapping(value = "/hello") public String function() { return "hello " + author + ",your age is " + age; } }

看我的调用效果:

配置文件动态刷新

刚才启动的项目先不要关闭,我们接着在nacos上编辑demo-dev.properties文件,我们尝试修改age值

改成18岁,然后点击"发布"按钮,相当于重新刷新一下配置的值。

重新发布后,控制台上打印出?Refresh keys changed: [age] ,说明重新刷新了age的值。

再次访问,值就已经刷新啦!

?

更多的配置文件

目前我们的应用可以读取demo.properties文件与demo-dev.properties文件,如果想把更多的配置文件加入到nacos中,应该怎么读取呢?

假设我们有一个数据库的配置要抽出来单独放到 database.yaml中。我们可以这样配。

在nacos中增加一个database.yaml的配置,如下图。

database.yaml的配置内容如下:

spring: datasource: mysql: driver-class-name: com.mysql.cj.jdbc.Driver

既然是yaml格式,那么在配置的时候,配置格式选择"yaml"。?为了测试,我们把Group设计为"common"。因为有同学可能会问Group一定要为"dev"吗。我的答案是dev开发环境最好设计为"dev"。这里为了测试,所以才设置的是"Group=Common"。

配置好了以后,怎么让项目启动的时候读取除了刚才的demo.properties以及demo-dev.properties,怎么额外读取这个database.yaml,且分组是common的配置文件呢?

我们在bootstrap.properties文件中追加这段配置。

#额外的配置文件 #额外的第一个配置文件的dataId spring.cloud.nacos.config.extension-configs[0].data-id=database.yaml #额外的第一个配置文件的分组 spring.cloud.nacos.config.extension-configs[0].group=common #开启自动刷新 spring.cloud.nacos.config.extension-configs[0].refresh=true #额外的第二个配置文件只需要改变角标即可 #spring.cloud.nacos.config.extension-configs[1].data-id=xxxx #spring.cloud.nacos.config.extension-configs[1].group=xxxx #spring.cloud.nacos.config.extension-configs[1].refresh=true #额外的第三个配置文件 #spring.cloud.nacos.config.extension-configs[2].data-id=xxxx #spring.cloud.nacos.config.extension-configs[2].group=xxxx #spring.cloud.nacos.config.extension-configs[2].refresh=true #更多额外的配置文件....

测试Controller代码如下:

@RestController @RequestMapping(value = "/") @RefreshScope public class DBController { @Value("${spring.datasource.mysql.driver-class-name}") private String driver; @GetMapping(value = "/db") public String function() { return driver; } }

?浏览器访问查看,localhost:8081/db ,读取到了我们在nacos中的database.yaml中的${spring.datasource.mysql.driver-class-name} 配置的值。嘎嘎。

?

总结?

你真是太棒啦!这是伟大的第一步,我们终于成功入门了nacos!

你看我都这么努力的分享知识给你了,鼓励一下又何妨O(∩_∩)O 你的打赏是对我最好的支持!

?? ? ? ? ? ? ? ? ? ?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #amplt #Spring