需要的依赖
<!--nacos注册中心依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--nacos配置中心依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
首先我们启动nacos并访问网页,在配置管理页面点击加号新建一个配置
这里我们说一下data id的取名规则, nacos官网的推荐为${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file.extension}
也就是 服务名-开发环境.文件后缀
举个例子,服务名为config-test,开发环境为dev,文件后缀为properties
那么我们的data id取名为 config-test-dev.proerties
新建一个项目读取该配置文件,其中我们配置中对应的三个值和官方推荐的命名规则相对应,那么nacos就能自动帮我们拼接完整的data id并读取其中的值
新建一个controller测试属性读取,@RefreshScope表示自动刷新,即nacos配置中心修改后程序会动态读取,不加则不会刷新
@RestController
@RefreshScope
public class ConfigController {
@Value("${config.test}")
String configTest = null;
@GetMapping("/configTest")
public String config() {
return "从nacos配置中心取到的属性为"+configTest;
}
}
访问该测试类,成功读取nacos配置中心的属性
我们去naocs中更新属性值,并再次访问,可以发现值被动态读取了
此处说几个我发现的nacos读取配置文件的奇怪现象,首先是不管你nacos中dataid取什么值
,只要你项目配置文件中spring.application.name和dataid相同,前缀,后缀,开发环境什么的你乱写都可以给你找到并成功读取,还有就是只要你的应用名和官方命名规则的前缀相同,dev和nacos中dataid里面dev那一部分相同(我只测试了properties文件),也是前缀后缀dataid乱写都可以
最后我们介绍一下nacos的持久化
nacos其实是自带了一个数据库的,叫做derby,也就是说nacos默认就支持持久化的,我们关闭naocs后重启服务配置文件依旧还在,其数据就保存在datq文件夹下
但是derby数据不便于我们观察和维护,因此我们可以使用mysql作为nacos的数据源
此处我去服务器中用docker启动一个mysql服务并挂载数据
docker run -p 3306:3306 --name mysql -v /root/dev/docker/mysql/conf:/etc/mysql/conf.d -v /root/dev/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d
新建一个数据,数据库名随意,字符集选择utf8
打开nacos的文件夹,找到nacos-mysql.sql并运行
还是conf目录,点击配置文件打开修改
修改前
修改后
修改并保存后重启nacos,由于我们持久化数据源变成了mysql,而mysql中并没有数据,因此我们之前配置的配置文件都会消失
我们新建一个配置文件
可以发现这个时候mysql中也多了一条数据
此时我们再重启naocs会发现数据依然还在