vlambda博客
学习文章列表

Nacos基于数据库存储数据、yml加载、权限控制介绍

前言:目前据我所知,nacos最新的版本是1.2.0版本,2020年3月4号发布的。所以我也就拿这个版本使用,做个小白鼠,据说权限验证在该版本中进行了使用。V1.2.0版本我才下载使用,所以我说的不一定对,自行分析,仅供参考。


一:Nacos基于数据库存储


  1. 关于nacos是什么?怎么启动?这些问题请百度,不做介绍。

  2. https://pan.baidu.com/s/1XQRGc7uo2qREsrwFqlEs1A

    提取码:r3pq

  3. 执行nacos数据库的初始化脚本,脚本在conf文件夹下。


    Nacos基于数据库存储数据、yml加载、权限控制介绍


  4. 对nacos核心配置文件进行配置,开启数据库连接。


Nacos基于数据库存储数据、yml加载、权限控制介绍


5. 1.2版本,服务账号密码默认时不开启的,这个需要开启下。否则不需要账号密码即可访问nacos后台。

Nacos基于数据库存储数据、yml加载、权限控制介绍


6. 然后启动nacos服务,这里注意下,可能会出现如下错误:

Nacos基于数据库存储数据、yml加载、权限控制介绍

如果出现这个,说明是数据库的版本太高,目测是8.X版本。因为1.2版本源码pom引入的mysql版本是5.x版本,所以遇到这个情况有二种方案:

1)新建一个数据库版本5.7.x的数据库,而不用高版本的8.x

2)修改nacos源码,修改pom文件依赖的mysqljar包版本,提升到8.x,以及代码的一些修改。 

详细修改如下:

    1)修改最外层pom的mysql版本,比如8.0.16

<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version></dependency>

    2)修改naming这个项目com.alibaba.nacos.naming.healthcheck 包下的  MysqlHealthCheckProcessor 类的第24行导包为:

import com.mysql.cj.jdbc.MysqlDataSource;

    3)由于mysql8及其以上版本需要带时区,所以还需要修改 console这项目 resources/META-INF下 nacos-default.properties这个文件中的db.url

db.url.0=jdbc:mysql://11.162.196.161:3306/diamond_devtest?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=truedb.url.1=jdbc:mysql://11.163.152.91:3306/diamond_devtest?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true


    4)打包项目即可

mvn -Prelease-nacos clean install -U


  7.验证是否是存储在数据库的。 

     1)根据初始化脚本默认的账号密码nacos/nacos登录nacos后台。登录后页面大致如下:

Nacos基于数据库存储数据、yml加载、权限控制介绍


     2)最简单的方式把,新建一个用户看看。然后去数据库看下,可新建了用户就可确定是否启用数据库存储的数据。

Nacos基于数据库存储数据、yml加载、权限控制介绍

Nacos基于数据库存储数据、yml加载、权限控制介绍





二:Nacos基于加载项目yml配置文件

   特别说明:nacos版本用的是1.1.4,为什么不用1.2.0呢?因为目前1.2.0才发布,阿里的整合jar包还没有出来,会出现兼容性问题,启动会各种问题。后续阿里更新了jar包再使用1.2.0


  1. 项目中引入依赖(假设我有个项目user-center)

<!--nacos 注册中心快速整合(目前最新已上传到maven的版本暂不支持nacos1.2.0版本)--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <!-- 排除低版本 --> <artifactId>fastjson</artifactId> <groupId>com.alibaba</groupId> </exclusion> <exclusion> <!-- 排除低版本 --> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency> <!--nacos 配置中心快速整合(目前最新已上传到maven的版本暂不支持nacos1.2.0版本)--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <exclusions> <exclusion> <!-- 排除低版本 --> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </exclusion> <exclusion> <!-- 排除低版本 --> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency>

      2. 修改默认的application.yml为bootstrap.yml(这个没啥可说的,加载顺序关系,不太明白的可以百度)

Nacos基于数据库存储数据、yml加载、权限控制介绍


     3. 在nacos中配置user-center需要的一些配置(随意模拟下)

          3.1)登录nacos后台,然后创建一个命名空间。然后会自动生成一个命名空间ID,这个ID是有用的,相当于唯一标识。

           

Nacos基于数据库存储数据、yml加载、权限控制介绍


         3.2)然后到配置列表找到创建的命名空间名称下去新增一个yml配置(当然如果已经有配置文件,可以选择导入配置),填一些配置测试即可。

Nacos基于数据库存储数据、yml加载、权限控制介绍

           

Nacos基于数据库存储数据、yml加载、权限控制介绍



      4. 在项目bootstrap.yml中配置nacos注册中心和配置中心,加载这些配置。

spring: main: ##这个是为了解决bean重复定义报错。 ##设置为true时,后定义的bean会覆盖之前定义的相同名称的bean allow-bean-definition-overriding: true application: name: user
cloud: nacos: config: ##nacos服务器地址:端口 server-addr: 127.0.0.1:8848        ##指定配置文件读取的后缀(默认读取的配置文件是properties) file-extension: yml ##默认为public 命名空间,不需要写。写了的话就是指定的命名空间 namespace: 7811a27f-19b5-4cf8-ad60-4c8a2ff17407 ##配置多个共享的dataId,多个用,分割 shared-configs: - dataId: user.yml refresh: true ##是否开启配置中心,默认true enabled: true discovery: ##服务注册nacos地址:端口        server-addr: 127.0.0.1:8848


      5. 启动user-center项目(启动前先启动nacos服务),然后看配置的端口10001是否启用(如果是没启用,因为没配置默认端口是8080)



   如上,如果没报错,出现端口10001即表示采用了nacos上的配置。



   三:nacos权限控制

    V1.2.0版本的权限控制简单看了下,目前来说比较简陋,没有什么一键化勾选分配权限之说。而且分配之后的权限页面并不会隐藏,只是在页面弹出授权失败的报错提示。如下:

  这个权限控制就和平是用的权限系统差不多,只不过是低配版的,所以我也就不做介绍了,没啥意义。  期待阿里后续版本对这个的升级