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-democloud:nacos:config:server-addr: 127.0.0.1:8848namespace: publicgroup: DEFAULT_GROUPfile-extension: yamlrefresh-enabled: truemanagement: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?? 啟動與測試
- 啟動本地 Nacos(默認端口 8848)
- 啟動 Spring Boot 應用
- 訪問
http://localhost:8080/hello
→ 返回Message from Nacos: Hello from Nacos!
- 在 Nacos 控制臺修改
app.message
→ 保存 - 再次訪問
/hello
,無需重啟應用即可看到新值(因為@RefreshScope
+refresh-enabled: true
)
? 總結
這個示例展示了:
@ConfigurationProperties
從 Nacos 拉取配置@RefreshScope
支持動態刷新bootstrap.yml
提前加載遠程配置- 最小依賴組合,直接可運行