Spring Cloud Alibaba 大型互联网领域多场景最佳实践-完整分享

70 阅读3分钟

一、环境配置的基本原则

1.分离配置与代码:将配置与代码分离,确保不同环境使用不同的配置,而不需要修改代码。

2.使用配置文件:通常使用 application.properties 或 application.yml 文件来管理配置。

3.环境区分:通过不同的配置文件或配置中心来区分不同环境的配置,如 application-dev.ymlapplication-test.ymlapplication-prod.yml

Spring Cloud Alibaba 大型互联网领域多场景最佳实践|完结无密_优课it

4.安全性:敏感信息(如数据库密码、API 密钥)应加密存储,避免硬编码在配置文件中。

5.配置中心:使用配置中心(如 Nacos、Spring Cloud Config)来集中管理配置,方便在不同环境中切换和更新配置。

二、使用不同的配置文件

1. 创建环境特定的配置文件

Spring Boot 支持根据激活的 Spring Profile 加载不同的配置文件。常见的做法是为每个环境创建一个独立的配置文件:

  • application-dev.yml(开发环境)
  • application-test.yml(测试环境)
  • application-prod.yml(生产环境)

2. 示例:application-dev.yml

yaml
取消自动换行
复制
spring:
  application:
    name: my-spring-cloud-app
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080
  datasource:
    url: jdbc:mysql://localhost:3306/dev_db
    username: dev_user
    password: dev_password

3. 示例:application-prod.yml

yaml
取消自动换行
复制
spring:
  application:
    name: my-spring-cloud-app
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.100:8848
      config:
        server-addr: 192.168.1.100:8848
        file-extension: yaml
    sentinel:
      transport:
        port: 8719
        dashboard: 192.168.1.100:8080
  datasource:
    url: jdbc:mysql://192.168.1.100:3306/prod_db
    username: prod_user
    password: prod_password

4. 激活环境

在启动应用程序时,通过设置 spring.profiles.active 参数来激活相应的环境配置。例如:

  • 开发环境

    bash
    取消自动换行
    复制
    java -jar my-app.jar --spring.profiles.active=dev
    
  • 生产环境

    bash
    取消自动换行
    复制
    java -jar my-app.jar --spring.profiles.active=prod
    

三、使用配置中心(Nacos)

使用 Nacos 作为配置中心,可以集中管理不同环境的配置,方便动态更新和版本控制。

1. 配置 Nacos

在 Nacos 中创建不同的配置集(Data ID),对应不同的环境。例如:

  • my-spring-cloud-app-dev.yaml(开发环境)
  • my-spring-cloud-app-prod.yaml(生产环境)

2. 示例:my-spring-cloud-app-dev.yaml

yaml
取消自动换行
复制
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dev_db
    username: dev_user
    password: dev_password
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080

3. 示例:my-spring-cloud-app-prod.yaml

yaml
取消自动换行
复制
spring:
  datasource:
    url: jdbc:mysql://192.168.1.100:3306/prod_db
    username: prod_user
    password: prod_password
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.100:8848
      config:
        server-addr: 192.168.1.100:8848
        file-extension: yaml
    sentinel:
      transport:
        port: 8719
        dashboard: 192.168.1.100:8080

4. 配置 Spring Boot 应用程序

在 application.yml 中配置 Nacos 配置中心:

yaml
取消自动换行
复制
spring:
  application:
    name: my-spring-cloud-app
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        # 指定激活的环境
        shared-configs:
          - data-id: my-spring-cloud-app-${spring.profiles.active}.yaml
            refresh: true

5. 激活环境

通过设置 spring.profiles.active 参数来激活相应的环境配置。例如:

  • 开发环境

    bash
    取消自动换行
    复制
    java -jar my-app.jar --spring.profiles.active=dev
    
  • 生产环境

    bash
    取消自动换行
    复制
    java -jar my-app.jar --spring.profiles.active=prod
    

四、敏感信息管理

1. 使用加密

对于敏感信息,可以使用加密工具(如 Jasypt)进行加密存储。例如:

yaml
取消自动换行
复制
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dev_db
    username: ENC(encrypted_username)
    password: ENC(encrypted_password)

2. 配置 Jasypt

在 application.yml 中配置 Jasypt:

yaml
取消自动换行
复制
jasypt:
  encryptor:
    password: my-secret-password

3. 启动 Jasypt 依赖

在 pom.xml 中添加 Jasypt 依赖:

xml
取消自动换行
复制
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

4. 加密和解密

使用 Jasypt 提供的工具对敏感信息进行加密,并在配置文件中使用 ENC() 包裹加密后的字符串。

五、配置优先级

Spring Boot 和 Spring Cloud 提供了多种配置方式,配置优先级如下:

  1. 1.命令行参数:通过命令行传递的参数优先级最高。
  2. 2.环境变量:环境变量的优先级次之。
  3. 3.配置文件application.yml 或 application.properties 的优先级再次之。
  4. 4.默认配置:应用程序内部的默认配置优先级最低。

六、示例:完整的配置流程

1. 创建不同环境的配置文件

  • application-dev.yml
  • application-test.yml
  • application-prod.yml

2. 配置 Nacos 配置中心

在 Nacos 中创建对应的配置集,并确保 spring.cloud.nacos.config.server-addr 指向正确的 Nacos 服务器地址。

3. 配置应用程序

在 application.yml 中配置 Nacos:

yaml
取消自动换行
复制
spring:
  application:
    name: my-spring-cloud-app
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        shared-configs:
          - data-id: my-spring-cloud-app-${spring.profiles.active}.yaml
            refresh: true
      discovery:
        server-addr: 127.0.0.1:8848
    sentinel:
      transport:
        port: 8719
        dashboard: 127.0.0.1:8080

4. 启动应用程序

通过命令行参数激活相应的环境:

bash
取消自动换行
复制
java -jar my-app.jar --spring.profiles.active=prod

七、总结

在不同环境下配置 Spring Cloud Alibaba,主要通过以下步骤实现:

  1. 1.创建环境特定的配置文件:为每个环境创建独立的配置文件。
  2. 2.使用配置中心:利用 Nacos 等配置中心集中管理配置,方便动态更新和版本控制。
  3. 3.管理敏感信息:使用加密工具管理敏感信息,确保安全性。
  4. 4.配置优先级管理:了解配置优先级,合理设置配置,确保应用程序在不同环境下正确加载配置。
  5. 5.自动化部署:结合 CI/CD 工具,实现配置的自动化管理和部署。