10.4、基础配置管理
基础配置管理
基础配置管理是使用 Nacos 配置中心的第一步。本节将学习如何进行基础配置管理。
本节将学习:添加配置、读取配置、@Value 注解,以及 @ConfigurationProperties。
在商城项目中集成 Nacos 配置中心
步骤1:添加 Nacos Config 依赖
文件路径: mall-microservices/user-service/pom.xml
在 <dependencies> 中添加:
<!-- Nacos 配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
注意:需要同时保留 Nacos Discovery 依赖,因为配置中心和服务发现可以同时使用。
步骤2:创建 bootstrap.yml 配置文件
文件路径: mall-microservices/user-service/src/main/resources/bootstrap.yml
spring: application: name: user-service cloud: nacos: config: server-addr: localhost:8848 namespace: public group: DEFAULT_GROUP file-extension: yaml # 共享配置(可选) shared-configs: - data-id: common-config.yaml group: SHARED_GROUP refresh: true discovery: server-addr: localhost:8848 namespace: public group: DEFAULT_GROUP
bootstrap.yml 说明:
bootstrap.yml在application.yml之前加载- 用于配置 Nacos 连接信息
- 确保在应用启动前就能连接到 Nacos
步骤3:在 Nacos 控制台添加配置
在 Nacos 控制台添加配置:
- 访问 Nacos 控制台:http://localhost:8848/nacos
- 进入"配置管理" -> "配置列表"
- 点击"+"按钮,创建新配置
配置信息:
- Data ID:
user-service.yaml(格式:${spring.application.name}.${file-extension}) - Group:
DEFAULT_GROUP - 配置格式:YAML
- 配置内容:
# 数据库配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root # MyBatis Plus 配置 mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: auto # 应用自定义配置 app: name: user-service version: 1.0.0 description: 用户服务
步骤4:更新 application.yml
文件路径: mall-microservices/user-service/src/main/resources/application.yml
server: port: 8081 # 注意:数据库等配置已迁移到 Nacos,这里只保留本地配置 # 如果需要本地覆盖,可以在这里配置 # Actuator 配置 management: endpoints: web: exposure: include: health,info,metrics endpoint: health: show-details: always
步骤5:使用 @Value 读取配置
文件路径: mall-microservices/user-service/src/main/java/com/mall/userservice/config/AppConfig.java
package com.mall.userservice.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Value("${app.name}") private String appName; @Value("${app.version}") private String appVersion; @Value("${app.description}") private String appDescription; // getters public String getAppName() { return appName; } public String getAppVersion() { return appVersion; } public String getAppDescription() { return appDescription; } }
步骤6:使用 @ConfigurationProperties 读取配置
文件路径: mall-microservices/user-service/src/main/java/com/mall/userservice/config/AppProperties.java
package com.mall.userservice.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "app") public class AppProperties { private String name; private String version; private String description; // getters and setters public String getName() { return name; } public void setName(String name) { this.name = name; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
步骤7:在代码中使用配置
文件路径: mall-microservices/user-service/src/main/java/com/mall/userservice/controller/InfoController.java
package com.mall.userservice.controller; import com.mall.userservice.config.AppProperties; import com.mall.userservice.common.Result; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @RestController @RequestMapping("/api/info") public class InfoController { @Value("${app.name}") private String appName; @Autowired private AppProperties appProperties; @GetMapping public Result<Map<String, Object>> getInfo() { Map<String, Object> info = new HashMap<>(); info.put("appName", appName); info.put("appNameFromProperties", appProperties.getName()); info.put("version", appProperties.getVersion()); info.put("description", appProperties.getDescription()); return Result.success(info); } }
配置迁移步骤
从 application.yml 迁移到 Nacos
迁移步骤:
-
识别需要迁移的配置:
- 数据库配置
- Redis 配置
- 第三方服务配置
- 业务参数配置
-
在 Nacos 控制台创建配置:
- Data ID:
${spring.application.name}.yaml - Group:
DEFAULT_GROUP - 配置内容:从
application.yml复制
- Data ID:
-
更新 application.yml:
- 删除已迁移的配置
- 保留本地特定配置(如端口号)
-
验证配置读取:
- 启动服务
- 验证配置是否正确读取
- 检查日志确认配置来源
商品服务配置迁移示例
在 Nacos 控制台创建配置:
- Data ID:
product-service.yaml - Group:
DEFAULT_GROUP - 配置内容:
# 数据库配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/product_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root # 商品服务特定配置 product: default-page-size: 10 max-page-size: 100 cache-enabled: true cache-ttl: 3600
订单服务配置迁移示例
在 Nacos 控制台创建配置:
- Data ID:
order-service.yaml - Group:
DEFAULT_GROUP - 配置内容:
# 数据库配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/order_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root # 订单服务特定配置 order: order-no-prefix: ORD default-timeout: 30 max-retry-times: 3
@Value 注解
使用示例
@Value("${app.name}") private String appName; @Value("${app.version:1.0.0}") private String appVersion;
@ConfigurationProperties
使用示例
@ConfigurationProperties(prefix = "app") @Data public class AppConfig { private String name; private String version; private Integer port; }
官方资源
本节小结
在本节中,我们学习了:
第一个是添加配置。 在 Nacos 中添加配置。
第二个是读取配置。 从 Nacos 读取配置。
第三个是 @Value 注解。 使用 @Value 读取单个配置值。
第四个是 @ConfigurationProperties。 使用 @ConfigurationProperties 绑定配置对象。
这就是基础配置管理。掌握基础配置管理,是使用配置中心的基础。
在下一节,我们将学习动态配置刷新。