Nacos之配置中心业务规则和动态刷新

我爱海鲸 2025-02-11 17:42:09 sc alibaba

简介SpringCloud Alibaba、springboot3

0、链接上一篇文章:http://www.haijin.xyz/article/767

1、在nacos上新建配置:

2、项目截图:

3、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">
    <parent>
        <artifactId>nacosProject</artifactId>
        <groupId>xyz.haijin</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-config-nacos-client3377</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!--bootstrap-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--web + actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

4、bootstrap.yml:

# nacos配置
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.3.10:8848 #配置Nacos地址
        username: nacos
        password: nacos
      config:
        server-addr: 192.168.3.10:8848 #配置Nacos地址
        username: nacos
        password: nacos
        file-extension: yaml #指定yaml格式的配置
#        group: PROD_GROUP
#        namespace: Prod_Namespace
#        extension-configs:  # 能够加载额外的配置
#          - data-id: nacos-config-1.yaml
#            refresh: true
#          - data-id: nacos-config-2.yaml
#            refresh: true

# nacos端配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是:nacos-config-client-dev.yaml

5、application.yml:

server:
  port: 3377

spring:
  profiles:
    active: dev # 表示开发环境
#  active: prod # 表示生产环境
#  active: test # 表示测试环境

6、NacosConfigClient3377:

package xyz.haijin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClient3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClient3377.class, args);
    }
}

7、NacosConfigClientController:

package xyz.haijin.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class NacosConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

8、访问:http://localhost:3377/config/info

修改nacos配置之后能够自动更新:

9、命名空间

# nacos配置
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.3.10:8848 #配置Nacos地址
        username: nacos
        password: nacos
      config:
        server-addr: 192.168.3.10:8848 #配置Nacos地址
        username: nacos
        password: nacos
        file-extension: yaml #指定yaml格式的配置
        group: PROD_GROUP
        namespace: 78e4461a-7f5e-4ce4-a995-1c5238a6976a
#        extension-configs:  # 能够在家额外的配置
#          - data-id: nacos-config-1.yaml
#            refresh: true
#          - data-id: nacos-config-2.yaml
#            refresh: true

# nacos端配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是:nacos-config-client-dev.yaml

使用额外的配置文件:

# nacos配置
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.3.10:8848 #配置Nacos地址
        username: nacos
        password: nacos
      config:
        server-addr: 192.168.3.10:8848 #配置Nacos地址
        username: nacos
        password: nacos
        file-extension: yaml #指定yaml格式的配置
        group: PROD_GROUP
        namespace: 78e4461a-7f5e-4ce4-a995-1c5238a6976a
        extension-configs:  # 能够加载额外的配置
          - data-id: nacos-config-1.yaml
            group: PROD_GROUP
            refresh: true
#          - data-id: nacos-config-2.yaml
#            refresh: true

# nacos端配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是:nacos-config-client-dev.yaml

NacosConfigClientController:

package xyz.haijin.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class NacosConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @Value("${config.info1}")
    private String configInfo1;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }

    @GetMapping("/config/info1")
    public String getConfigInfo1() {
        return configInfo1;
    }
}

2025-02-11 start:

在nacos上配置一些数据并映射到实体类中:

创建实体类:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @author haijin
 * @description: 短信发送接口配置类
 * @date 2025/2/11 17:07
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "test")
public class SenderProperties {

    /**
     * 地址
     */
    private String url;

    /**
     * 用户
     */
    private String user;

}

在nacos上配置:

---
test:
  url: www.haijin.xyz
  user: haijin

"---"这个表示单独开一列

end

你好:我的2025