2025-03-26
编程
00
请注意,本文编写于 33 天前,最后修改于 33 天前,其中某些信息可能已经过时。

目录

1. 配置文件结构
文件命名规则
2. 主配置文件
示例:application.properties
示例:application.yml 或 application.yaml
3. 环境特定配置文件
示例:application-dev.properties
示例:application-test.properties
示例:application-prod.properties
4. 激活特定环境
方法一:在主配置文件中设置
方法二:通过命令行参数
方法三:通过环境变量
方法四:通过 IDE 配置
5. 多环境配置的优先级
6. YAML 文件中的多环境配置
示例:application.yml 或 application.yaml
7. 动态切换环境
8. 注意事项

在 Spring Boot 中,多环境配置是一种常见的需求。例如,开发环境、测试环境和生产环境可能需要不同的数据库连接、日志级别或其他配置。Spring Boot 提供了灵活的多环境配置机制,通过 application.propertiesapplication.ymlapplication.yaml文件可以轻松实现。

1. 配置文件结构

假设我们有以下三个环境:

  • 开发环境(dev
  • 测试环境(test
  • 生产环境(prod

文件命名规则

  • 主配置文件:application.propertiesapplication.ymlapplication.yaml
  • 环境特定配置文件:
    • application-dev.propertiesapplication-dev.ymlapplication-dev.yaml(开发环境)
    • application-test.propertiesapplication-test.ymlapplication-test.yaml(测试环境)
    • application-prod.propertiesapplication-prod.ymlapplication-prod.yaml(生产环境)

2. 主配置文件

主配置文件 application.propertiesapplication.ymlapplication.yaml 是全局默认配置文件。你可以在这里定义所有环境通用的配置,并指定激活的环境。

示例:application.properties

properties
# 全局默认配置 server.port=8080 # 激活的环境 spring.profiles.active=dev

示例:application.ymlapplication.yaml

yaml
server: port: 8080 spring: profiles: active: dev

3. 环境特定配置文件

每个环境的配置文件只包含该环境特有的配置。如果某个配置项没有在环境特定配置文件中定义,则会回退到主配置文件中的默认值。

示例:application-dev.properties

properties
# 开发环境配置 server.port=8081 spring.datasource.url=jdbc:mysql://localhost:3306/devdb spring.datasource.username=devuser spring.datasource.password=devpassword logging.level.root=DEBUG

示例:application-test.properties

properties
# 测试环境配置 server.port=8082 spring.datasource.url=jdbc:mysql://localhost:3306/testdb spring.datasource.username=testuser spring.datasource.password=testpassword logging.level.root=INFO

示例:application-prod.properties

properties
# 生产环境配置 server.port=8083 spring.datasource.url=jdbc:mysql://prod-server:3306/proddb spring.datasource.username=produser spring.datasource.password=prodpassword logging.level.root=WARN

4. 激活特定环境

Spring Boot 使用 spring.profiles.active 属性来决定当前激活的环境。有多种方式可以设置这个属性:

方法一:在主配置文件中设置

application.propertiesapplication.yml 中直接指定:

properties
spring.profiles.active=dev

方法二:通过命令行参数

运行应用程序时,可以通过命令行参数指定激活的环境:

bash
java -jar myapp.jar --spring.profiles.active=prod

方法三:通过环境变量

可以通过环境变量设置:

bash
export SPRING_PROFILES_ACTIVE=prod java -jar myapp.jar

方法四:通过 IDE 配置

如果你使用的是 IntelliJ IDEA 或 Eclipse,可以在运行配置中添加 VM 参数或环境变量:

  • VM 参数:-Dspring.profiles.active=dev
  • 环境变量:SPRING_PROFILES_ACTIVE=dev

5. 多环境配置的优先级

Spring Boot 的配置加载顺序决定了多环境配置的优先级。以下是常见的优先级(从高到低):

  1. 命令行参数
  2. 环境变量
  3. application-{profile}.propertiesapplication-{profile}.yml
  4. application.propertiesapplication.yml

这意味着,命令行参数中的配置会覆盖环境特定配置文件中的配置,而环境特定配置文件中的配置又会覆盖主配置文件中的配置。


6. YAML 文件中的多环境配置

如果你使用的是 application.ymlapplication.yaml,可以通过 --- 分隔符在同一文件中定义多个环境的配置。

示例:application.ymlapplication.yaml

yaml
# 全局默认配置 server: port: 8080 spring: profiles: active: dev --- # 开发环境配置 spring: profiles: dev server: port: 8081 spring: datasource: url: jdbc:mysql://localhost:3306/devdb username: devuser password: devpassword logging: level: root: DEBUG --- # 测试环境配置 spring: profiles: test server: port: 8082 spring: datasource: url: jdbc:mysql://localhost:3306/testdb username: testuser password: testpassword logging: level: root: INFO --- # 生产环境配置 spring: profiles: prod server: port: 8083 spring: datasource: url: jdbc:mysql://prod-server:3306/proddb username: produser password: prodpassword logging: level: root: WARN

7. 动态切换环境

在开发过程中,你可能需要频繁切换环境。可以通过以下方式快速切换:

  1. 修改 application.properties 中的 spring.profiles.active
  2. 在运行时通过命令行参数动态指定环境:
    bash
    java -jar myapp.jar --spring.profiles.active=test

8. 注意事项

  1. 敏感信息保护 如果配置文件中包含敏感信息(如数据库密码),建议使用加密工具(如 Jasypt)对这些信息进行加密。

  2. 避免重复配置 尽量将通用的配置放在主配置文件中,只有环境特定的配置才放在对应的环境配置文件中。

  3. 测试环境配置 在测试环境中,确保配置与生产环境尽可能一致,以减少因环境差异导致的问题。