导入依赖
咳咳,划重点,从导入依赖开始,坑就已经来了,哈哈!!!
导入的依赖很有讲究,你是啥springboot版本,然后下面的nacos版本配置就是啥,我也是醉啦。详情看我的配置,我的springboot依赖版本是2.2.6.RELEASE,然后我的nacos赖版版本也是2.2.6.RELEASE。
我强烈建议兄弟你先按照我的springboot 2.2.6.RELEASE 版本来,等看完本篇文章后你再切换成你自己的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
大宇期待与你们共同进步!同时也非常感谢最近兄弟们的支持!