本节我们主要分析 配置管理 的章节
拉取 Nacos 源码
用 Idea 或者 git clone 拉取 Nacos 源码;源码地址
git clone https://github.com/alibaba/nacos.git
启动配置管理模块项目
源码中有很多模块,其他的我们先不看,主要看 nacos-config
模块,这个模块是配置管理相关的项目;
这是一个 Spring-Boot 项目,我们找到启动类 Config
运行;
结果会发现报错:
java.io.IOException: java.lang.IllegalArgumentException: db.num is null
at com.alibaba.nacos.config.server.service.BasicDataSourceServiceImpl.reload(BasicDataSourceServiceImpl.java:217)
at com.alibaba.nacos.config.server.service.BasicDataSourceServiceImpl.init(BasicDataSourceServiceImpl.java:131)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
分析启动源码得知,错误的原因是没有数据库,但是没有配置数据库;所以我们得先配置数据库;
单机模式使用 Derby 嵌入式数据库
Nacos 单机模式默认是用内置了嵌入式数据库 Derby 做存储的;
/*如果是单机模式,并且不使用Mysql; 这个propertyUtil.isStandaloneUseMysql()只有在配置了属性
spring.datasource.platform=mysql 才会去初始化Mysql数据源
*/
if (STANDALONE_MODE && !propertyUtil.isStandaloneUseMysql()) {
dataSourceService = (DataSourceService)applicationContext.getBean("localDataSourceService");
} else {
dataSourceService = (DataSourceService)applicationContext.getBean("basicDataSourceService");
}
想要切换成 mysql 配置一下
spring.datasource.platform=mysql
因为模式不是单机模式,所有我们启动的时候要配置单机模式启动;
我们在启动的时候加上 JVM 属性 -Dnacos.standalone=true
;就可以了;
关于 Jvm 属性配置,不懂的可以看这里 Java -D 设置系统属性讲解
注意: Derby 数据库只有在 Nacos 是单机模式的时候才会使用,而且 Nacos 单机模式只可以在测试和学习的时候使用,不建议使用在生产环境中,生产环境的数据库是 Mysql
单机模式启动,使用 Mysql 数据库
在使用 Mysql 之前,需要先建立 nacos_config 的数据库 sql 文件在模块 distribution
中的 conf/nacos-mysql.sql
; 执行一下这个文件; 然后在模块 nacos-config/resources
下面新建一个配置文件 application.properties
里面配置一下数据库
# 数据源用 mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://XX.XX.XXX.XX:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=user
db.password=password
启动,成功!
启动成功之后我们就可以配置数据和获取数据了,因为我们指启动了 nacos-config
模块,所以是没有 UI 界面的; 通过接口来操作数据;
配置数据
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
获取刚刚配置的数据
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
接下来,我们从分析一下 nacos-config
的源码
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于