Nacos基于数据库存储数据、yml加载、权限控制介绍
前言:目前据我所知,nacos最新的版本是1.2.0版本,2020年3月4号发布的。所以我也就拿这个版本使用,做个小白鼠,据说权限验证在该版本中进行了使用。V1.2.0版本我才下载使用,所以我说的不一定对,自行分析,仅供参考。
一:Nacos基于数据库存储
关于nacos是什么?怎么启动?这些问题请百度,不做介绍。
https://pan.baidu.com/s/1XQRGc7uo2qREsrwFqlEs1A
提取码:r3pq
执行nacos数据库的初始化脚本,脚本在conf文件夹下。
对nacos核心配置文件进行配置,开启数据库连接。
5. 1.2版本,服务账号密码默认时不开启的,这个需要开启下。否则不需要账号密码即可访问nacos后台。
6. 然后启动nacos服务,这里注意下,可能会出现如下错误:
如果出现这个,说明是数据库的版本太高,目测是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=true
db.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后台。登录后页面大致如下:
2)最简单的方式把,新建一个用户看看。然后去数据库看下,可新建了用户就可确定是否启用数据库存储的数据。
二:Nacos基于加载项目yml配置文件
特别说明:nacos版本用的是1.1.4,为什么不用1.2.0呢?因为目前1.2.0才发布,阿里的整合jar包还没有出来,会出现兼容性问题,启动会各种问题。后续阿里更新了jar包再使用1.2.0
项目中引入依赖(假设我有个项目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(这个没啥可说的,加载顺序关系,不太明白的可以百度)
3. 在nacos中配置user-center需要的一些配置(随意模拟下)
3.1)登录nacos后台,然后创建一个命名空间。然后会自动生成一个命名空间ID,这个ID是有用的,相当于唯一标识。
3.2)然后到配置列表找到创建的命名空间名称下去新增一个yml配置(当然如果已经有配置文件,可以选择导入配置),填一些配置测试即可。
4. 在项目bootstrap.yml中配置nacos注册中心和配置中心,加载这些配置。
spring:
main:
##这个是为了解决bean重复定义报错。
##设置为true时,后定义的bean会覆盖之前定义的相同名称的bean
true :
application:
name: user
cloud:
nacos:
config:
##nacos服务器地址:端口
127.0.0.1:8848 :
##指定配置文件读取的后缀(默认读取的配置文件是properties)
yml :
##默认为public 命名空间,不需要写。写了的话就是指定的命名空间
namespace: 7811a27f-19b5-4cf8-ad60-4c8a2ff17407
##配置多个共享的dataId,多个用,分割
:
dataId: user.yml
refresh: true
##是否开启配置中心,默认true
enabled: true
discovery:
##服务注册nacos地址:端口
127.0.0.1:8848 :
5. 启动user-center项目(启动前先启动nacos服务),然后看配置的端口10001是否启用(如果是没启用,因为没配置默认端口是8080)
如上,如果没报错,出现端口10001即表示采用了nacos上的配置。
三:nacos权限控制
V1.2.0版本的权限控制简单看了下,目前来说比较简陋,没有什么一键化勾选分配权限之说。而且分配之后的权限页面并不会隐藏,只是在页面弹出授权失败的报错提示。如下:
这个权限控制就和平是用的权限系统差不多,只不过是低配版的,所以我也就不做介绍了,没啥意义。 期待阿里后续版本对这个的升级