Spring Boot + Nacos 配置中心示例工程

发布于:2025-09-04 ⋅ 阅读:(21) ⋅ 点赞:(0)

1️⃣ 工程结构

nacos-demo
 ├── pom.xml
 └── src
     ├── main
     │   ├── java
     │   │   └── com.example.nacosdemo
     │   │       ├── NacosDemoApplication.java
     │   │       ├── config
     │   │       │   └── AppProperties.java
     │   │       └── controller
     │   │           └── HelloController.java
     │   └── resources
     │       └── bootstrap.yml

2️⃣ pom.xml

使用 Spring Boot + Spring Cloud Alibaba Nacos Config 依赖:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>nacos-demo</artifactId>
    <version>1.0.0</version>
    <properties>
        <java.version>17</java.version>
        <spring.boot.version>3.2.5</spring.boot.version>
        <spring.cloud.version>2023.0.1</spring.cloud.version>
        <spring.cloud.alibaba.version>2023.0.1.0</spring.cloud.alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Nacos Config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!-- 方便调试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
</project>

3️⃣ bootstrap.yml

bootstrap.yml 会在应用启动早期加载,确保 Nacos 配置优先注入:

spring:
  application:
    name: nacos-demo
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: public
        group: DEFAULT_GROUP
        file-extension: yaml
        refresh-enabled: true

management:
  endpoints:
    web:
      exposure:
        include: "*"

4️⃣ 配置类 AppProperties.java

package com.example.nacosdemo.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

@Component
@RefreshScope // 支持动态刷新
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String message = "default message";

    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}

5️⃣ 控制器 HelloController.java

package com.example.nacosdemo.controller;

import com.example.nacosdemo.config.AppProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    private final AppProperties appProperties;

    public HelloController(AppProperties appProperties) {
        this.appProperties = appProperties;
    }

    @GetMapping("/hello")
    public String hello() {
        return "Message from Nacos: " + appProperties.getMessage();
    }
}

6️⃣ 启动类 NacosDemoApplication.java

package com.example.nacosdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

7️⃣ Nacos 配置中心添加配置

在 Nacos 控制台添加一个配置:

  • Data ID: nacos-demo.yaml(与 spring.application.name + .yaml 对应)
  • Group: DEFAULT_GROUP
  • 内容
app:
  message: Hello from Nacos!

8️⃣ 启动与测试

  1. 启动本地 Nacos(默认端口 8848)
  2. 启动 Spring Boot 应用
  3. 访问 http://localhost:8080/hello → 返回 Message from Nacos: Hello from Nacos!
  4. 在 Nacos 控制台修改 app.message → 保存
  5. 再次访问 /hello,无需重启应用即可看到新值(因为 @RefreshScope + refresh-enabled: true

总结
这个示例展示了:

  • @ConfigurationProperties 从 Nacos 拉取配置
  • @RefreshScope 支持动态刷新
  • bootstrap.yml 提前加载远程配置
  • 最小依赖组合,直接可运行