SpringCloud—整合Nacos作为配置中心

概述

网络上的大部分文档都是使用aliyun官方提供的示例为基础,但是由于springcloud的版本不同,或设置不同而导致示例报错而无法启动。

使用Nacos提供配置文件的时候,如果你创建新的命名空间,并且在新的命令空间下创建的配置文件,而官方的文档并没有给出详细的配置说明,导致Nacos读取配置文件不成功。

整合步骤

1、引入springboot及springcloud

多模块maven项目中,主pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dokbok</groupId>
    <artifactId>api-simulation</artifactId>
    <packaging>pom</packaging>
    <version>${revision}</version>

    <properties>
        <maven.compiler.source>18</maven.compiler.source>
        <maven.compiler.target>18</maven.compiler.target>
        <revision>1.0-SNAPSHOT</revision>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.11</version>
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

.......

子模块的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>company</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>

    </dependencies>

    <parent>
        <artifactId>api-simulation</artifactId>
        <groupId>com.dokbok</groupId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
</project>

2、项目结构图示

3、bootstrap.yaml配置

一定要注意:

  • 在整合Nacos为配置中心的时候,只能使用bootstrap.yaml文件,而不能使有application.yaml命令的配置文件,否则Nacos的配置将不生效。
  • 由于Nacos使用bootstrap.yaml文件装载配置,所以程序中必须引入spring-cloud-starter-bootstrap的依赖,否则bootstrap.yaml配置不会生效。
spring:
  profiles:
    active: home

  application:
    name: company

  cloud:
    nacos:
      config:
        server-addr: 192.168.3.2:8848
        namespace: ca3a26eb-7534-4252-9ace-0425be422960
        group: home
        file-extension: yaml
#        extension-configs:
#          - data-id: gateway
#            refresh: true
#        refresh-enabled: true

4、主启动类

@SpringBootApplication
@BootstrapConfiguration
@Slf4j
public class UsersApplication {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(UsersApplication.class, args);

        String[] activeProfiles = ctx.getEnvironment().getActiveProfiles();
        for (String profile : activeProfiles) {
            log.warn("Spring Boot 使用profile为:{}" , profile);
        }
    }
}

配置说明:

  • server-addr:Nacos服务器地址,如果Nacos集群,多个服务器之间使用逗号隔开。如,172.16.4.58:8848,172.16.4.59:8848,172.16.4.60:8848
  • namespace:命名空间,该值是命令空间的ID,例子中是自动生成的命令空间ID,你在创建时可以自定义
  • group:组
  • Data ID:注意,与Nacos中的Data ID相对应的springboot(或springcloud)的配置是spring.application.name(应用名)
  • file-extension:配置文件扩展名,默认值是.properties

Nacos下配置文件名的格式默认为:${prefix}-${spring.profiles.active}.${file-extension}

  • prefix:spring.application.name的值
  • spring.profiles.active:尽可能与nacos配置中的group保持一致,以避免歧义
  • file-extension:文件扩展名,支持properties、yaml(yml)

4、Nacos配置的截图

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注