SpringBoot 3.2.4整合Nacos详细流程
1 引入依赖
<properties>
<spring-boot.version>3.2.4</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<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>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2023.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2 项目启动类新增注解 @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class SbcPortalApplication {
public static void main(String[] args) {
SpringApplication.run(SbcPortalApplication.class, args);
}
}
3 resources 目录下只保留 bootstrap.yml
spring:
application:
name: ${app_name:${APP_NAME:sbc-portal}}
# profiles:
# active: ${profiles_active:${PROFILES_ACTIVE:stg}}
main:
allow-circular-references: true
cloud:
nacos:
username: ${config_username:${CONFIG_USERNAME:nacos}}
password: ${config_password:${CONFIG_PASSWORD:nacos}}
discovery:
server-addr: ${config_server_uri:${CONFIG_SERVER_URI:10.244.36.167:8848}}
namespace: ${config_profiles_active:${CONFIG_PROFILES_ACTIVE:msdev4}}
group: DEFAULT_GROUP
service: ${spring.application.name}
config:
server-addr: ${config_server_uri:${CONFIG_SERVER_URI:10.244.36.167:8848}}
file-extension: yml
namespace: ${config_profiles_active:${CONFIG_PROFILES_ACTIVE:msdev4}}
group: DEFAULT_GROUP
4 登录 nacos 管理台 新增配置。用户名密码:nacos/nacos
在 Nacos 中,最常见且推荐的方式来区分不同环境的配置是通过 Data ID。然而,命名空间 和 Group 也经常被用来辅助管理和组织配置。这三种方式各有其特点和适用场景,但 Data ID 是最直接且广泛使用的方法。
1. Data ID
data id 命名为
${spring.application.name}-dev.yml
${spring.application.name}-prod.yml
可以根据不同环境创建不同的yml文件
在bootstrap.yml中通过 spring.profiles.active 指定
spring:
profiles:
active: ${profiles_active:${PROFILES_ACTIVE:stg}}
为什么是最常见的方法?
- 灵活性高:每个环境可以拥有独立的 Data ID,如
your-service-name-dev.yaml
、your-service-name-test.yaml
和your-service-name-prod.yaml
。这种方式与 Spring Boot 的多环境配置机制无缝配合。 - 易于理解:开发者可以根据 Data ID 名称直观地判断配置所属的环境。
- 便于维护:不同的 Data ID 可以分别管理,更新一个环境的配置不会影响其他环境。
示例
spring:
application:
name: your-service-name # 应用名称
profiles:
active: dev # 指定活动的profile,默认为dev,可以根据需要切换到其他环境
cloud:
nacos:
config:
server-addr: 10.244.36.167:8848 # Nacos Server 地址
file-extension: yaml # 指定配置文件格式为YAML或properties
2. 命名空间 (Namespace)
data id 命名为 ${spring.application.name}.yml
何时使用?
- 隔离性强:当您希望完全隔离不同环境的配置,避免任何可能的冲突时,可以为每个环境创建独立的命名空间。
- 多租户支持:对于大型组织或多个团队共用一个 Nacos 实例的情况,命名空间可以作为逻辑上的“租户”来划分配置。
示例
- 开发环境:
dev
- 测试环境:
test
- 生产环境:
prod
在 Nacos 控制台中创建相应的命名空间,并确保应用程序根据当前环境选择正确的命名空间。
3. Group
何时使用?
- 分类清晰:如果您有大量配置项并且希望按照业务模块或功能区域进行分类,可以使用 Group 来组织这些配置。
- 简化管理:Group 可以帮助将配置项分组,使得管理和查找更加方便。
示例
COMMON_GROUP
:存放通用配置,如数据库连接池设置、日志级别等。SERVICE_GROUP
:存放服务特定的配置,如 REST API 路径、第三方服务地址等。
综合建议
虽然 Data ID 是最常见的方式,但在实际应用中,通常会结合 命名空间 和 Group 来达到最佳效果:
- Data ID:用于区分不同环境的配置文件。
- 命名空间:用于隔离不同环境或项目的配置,避免冲突。
- Group:用于对配置项进行分类和管理,提高可读性和维护性。
最佳实践组合
- 开发环境:
your-service-name-dev.yaml
,命名空间dev
,GroupDEFAULT_GROUP
或DEV_GROUP
。 - 测试环境:
your-service-name-test.yaml
,命名空间test
,GroupDEFAULT_GROUP
或TEST_GROUP
。 - 生产环境:
your-service-name-prod.yaml
,命名空间prod
,GroupDEFAULT_GROUP
或PROD_GROUP
。
总结
- 最常见的方式:Data ID 是最常见的区分不同环境的方法,因为它简单直接且易于理解和维护。
- 综合使用:结合命名空间和 Group 可以提供更强大的配置管理和组织能力,满足复杂的业务需求。