spring boot 3.0.x 集成 nacos 配置管理
1. 版本选择
集成最重要的就是各种版本兼容性问题。那个我们该如何选择合适的版本呢?
- spring cloud 和 spring boot 版本匹配
对于这个可以在官网上找到 spring.io/projects/sp… spirng boot 和 spring cloud 对应的版本
这里我的版本是 3.0.x 所以需要的 spring cloud 的版本 是 2022.0.x。然后在maven 仓库中选一个对的上的版本就行
- nacos 和 spring cloud 版本匹配
对于 nacos 的版本选择可以进入spring cloud alibaba 中可以看到对应的 spring cloud alibaba 和对应的 spring cloud 版本,我这里对应的是 2022.0.x。选中这个版本,翻到快速开始就可以看到我们需要的 nacos 版本是 2.2.x
2. nacos 安装
本地测试安装的话比较简单,总共分为四步
- nacos 下载
就是把上面 2.2.x 版本下载到本机上面就行,我这里下载的是 2.2.3 这个版本
- 配置 JAVA_HOME
需要注意的是,nacos是强依赖 JAVA_HOME 这个环境变量的,可能你的 JAVA 已经在 path 中,也需要配置这个环境变量
- 初始化数据库
在解压目录下有一个 nacos\conf\mysql-schema.sql 文件,在 mysql 创建一个 nacos 数据库执行这个 sql 文件就可以了
- 配置和启动
在解压目录下有一个 nacos\conf\application.properties 文件, 修改其中的
# 数据库数量
db.num=1
### 数据库连接
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
### 数据库连接用户名和密码
db.user.0=root
db.password.0=keep@xgitlink
# 往下翻找到 nacos.core.auth.enabled 修改认证为 true 这个是必须的
### If turn on auth system:
nacos.core.auth.enabled=true
# 集群相关认证 key value
nacos.core.auth.server.identity.key=xplaza
nacos.core.auth.server.identity.value=xplaza@2023
# 这个不知道啥用,还没搞懂
### The default token (Base64 String):
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
修改完成之后,在 nacos\bin 目录下,执行
-
Linux/Unix/Mac 操作系统,执行命令
startup.sh -m standalone -
Windows 操作系统,执行命令
startup.cmd -m standalone
启动完成后访问 http://127.0.0.1:8848/nacos/index.html 可以看到
这个就启动成功了。
输入默认用户名: nacos 密码: nacos 就可以进入 nacos 配置了
3. nacos 配置
nacos 网站配置很简单, 主要理清楚 nacos 的几个配置作用就随便配置了
- 命名空间 - 如果有多个公司的话,一般用来标识为那个公司
- GROUP - 分组,一般用来标识同一套系统不同的部署环境,默认 DEFAULT_GROUP
- DATA-ID - 配置名称,主要是微服务下各个应用的名称。
DATA-ID 比较特殊,它有特殊的命名规则。应用启动时会加载 ${spring.application.name}.${file-extension:properties } 还会加载 ${spring.application.name}-${profile}.${file-extension:properties }
其实主要作用就是为了方便的区分隔离和组合。
比如我们公司承接了 A - B - C 三家公司的项目,配置时就可以用命名空间来做大的区分。具体如何分离可以根据自己公司需求来。这里我采用的是将 命名空间 作为公司名称,GROUP 采用默认分组。通过 DATA-ID 来区分不同环境配置。
最后配置流程如下
点击新建 company1 的命名空间,注意这里的 ID 和 空间名 保持一致,后面我们 spring 配置是根据 ID 来匹配的
然后进入配置管理,点击我们创建好的命名空间,就可以新建配置了
注意这里 DATA-ID 我配置的是 x-api-dev.yaml 也就是我们的项目名称是 x-api, profile 环境是 dev, file-extension:properties 后缀是 yaml。后续 spring 配置 要和这个对应上
这里我配置了两个环境方便展示,配置完成后就可以开始 spring 相关配置了
4. spring boot 项目改造
1. maven 配置
<!--新增依赖集中管理-->
<dependencyManagement>
<dependencies>
<!--spring-boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring-cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring-alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2022.0.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--新增nacos-config依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--新增bootstrap依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
这里需要注意的是 对于 nacos 2.x 版本来说,由于
spring boot已经不再采用bootstrap配置来进行启动,如果用以前老的配置方式则需要加入spring-cloud-starter-bootstrap依赖
这里我将展示两种不同配置方式
- 使用
bootstrap配置
在根目录下新增 bootstrap.yml
spring:
application:
name: x-api
profiles:
active: dev
cloud:
nacos:
config:
serverAddr: 127.0.0.1:8848
namespace: company1
fileExtension: yaml
# 这里必须要有用户名密码进行连接
username: 'nacos'
password: 'nacos'
好了,注意这里的 namespace application.name profiles.name 要和上面我们新增的配置相同。然后重启项目我们就已经使用 nacos 作为配置中心获取配置进行启动了
- 不使用
bootstrap配置
注意使用这种方式则需要去掉
spring-cloud-starter-bootstrap依赖
修改 application.yml
spring:
application:
name: x-api
profiles:
active: dev
cloud:
nacos:
config:
serverAddr: 127.0.0.1:8848
username: 'nacos'
password: 'nacos'
namespace: company1
config:
import:
- nacos:x-api-dev.yaml?refreshEnabled=true
这种方式通过 config.import 来指定导入的配置文件,个人觉得没有上面使用 bootstrap 配置方便,不过如果有多个配置要一起使用的话, 这种可能更加方便一点
5. 结语
本来以为配置这个挺简单的,实际上各种版本和配置上面都有一些坑在等着你,也就是还是需要花时间去看去调试才行。
现在各种版本升级迭代为了满足大部分客户不同的要求。应用已经是越来越复杂,做个配置工程师需要查看的文档也越来越多。
简单配置一个配置中心也没有想象的那么容易