spring boot 3.0.x 集成 nacos 配置

4,058 阅读5分钟

spring boot 3.0.x 集成 nacos 配置管理

1. 版本选择

集成最重要的就是各种版本兼容性问题。那个我们该如何选择合适的版本呢?

  1. spring cloud 和 spring boot 版本匹配

d1daa3536b1447f9017e64b2a69498f.png

对于这个可以在官网上找到 spring.io/projects/sp… spirng bootspring cloud 对应的版本

这里我的版本是 3.0.x 所以需要的 spring cloud 的版本 是 2022.0.x。然后在maven 仓库中选一个对的上的版本就行

image.png

  1. nacos 和 spring cloud 版本匹配

image.png

对于 nacos 的版本选择可以进入spring cloud alibaba 中可以看到对应的 spring cloud alibaba 和对应的 spring cloud 版本,我这里对应的是 2022.0.x。选中这个版本,翻到快速开始就可以看到我们需要的 nacos 版本是 2.2.x

image.png

2. nacos 安装

本地测试安装的话比较简单,总共分为四步

  1. nacos 下载

就是把上面 2.2.x 版本下载到本机上面就行,我这里下载的是 2.2.3 这个版本

  1. 配置 JAVA_HOME

需要注意的是,nacos是强依赖 JAVA_HOME 这个环境变量的,可能你的 JAVA 已经在 path 中,也需要配置这个环境变量

image.png

image.png

  1. 初始化数据库

在解压目录下有一个 nacos\conf\mysql-schema.sql 文件,在 mysql 创建一个 nacos 数据库执行这个 sql 文件就可以了

  1. 配置和启动

在解压目录下有一个 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 目录下,执行

  1. Linux/Unix/Mac 操作系统,执行命令

    startup.sh -m standalone

  2. Windows 操作系统,执行命令

    startup.cmd -m standalone

image.png

启动完成后访问 http://127.0.0.1:8848/nacos/index.html 可以看到

image.png

这个就启动成功了。

输入默认用户名: nacos 密码: nacos 就可以进入 nacos 配置了

3. nacos 配置

nacos 网站配置很简单, 主要理清楚 nacos 的几个配置作用就随便配置了

  1. 命名空间 - 如果有多个公司的话,一般用来标识为那个公司
  2. GROUP - 分组,一般用来标识同一套系统不同的部署环境,默认 DEFAULT_GROUP
  3. DATA-ID - 配置名称,主要是微服务下各个应用的名称。

DATA-ID 比较特殊,它有特殊的命名规则。应用启动时会加载 ${spring.application.name}.${file-extension:properties } 还会加载 ${spring.application.name}-${profile}.${file-extension:properties }

其实主要作用就是为了方便的区分隔离和组合。

比如我们公司承接了 A - B - C 三家公司的项目,配置时就可以用命名空间来做大的区分。具体如何分离可以根据自己公司需求来。这里我采用的是将 命名空间 作为公司名称,GROUP 采用默认分组。通过 DATA-ID 来区分不同环境配置。

最后配置流程如下

image.png

点击新建 company1 的命名空间,注意这里的 ID空间名 保持一致,后面我们 spring 配置是根据 ID 来匹配的

image.png

然后进入配置管理,点击我们创建好的命名空间,就可以新建配置了

image.png

注意这里 DATA-ID 我配置的是 x-api-dev.yaml 也就是我们的项目名称是 x-api, profile 环境是 devfile-extension:properties 后缀是 yaml。后续 spring 配置 要和这个对应上

image.png

这里我配置了两个环境方便展示,配置完成后就可以开始 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 依赖

这里我将展示两种不同配置方式

  1. 使用 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 作为配置中心获取配置进行启动了

  1. 不使用 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. 结语

本来以为配置这个挺简单的,实际上各种版本和配置上面都有一些坑在等着你,也就是还是需要花时间去看去调试才行。

现在各种版本升级迭代为了满足大部分客户不同的要求。应用已经是越来越复杂,做个配置工程师需要查看的文档也越来越多。

简单配置一个配置中心也没有想象的那么容易