简单使用nacos作为统一配置中心及用mysql持久化

需要的依赖

<!--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会发现数据依然还在

经验分享 程序员 微信小程序 职场和发展