通过 application.yml 中的 spring.profiles.active 来指定激活哪个环境的配置文件。以下是具体实现步骤:

1. 新建三个配置文件

在项目的 src/main/resources 目录下,创建三个配置文件:

① 主配置文件:application.yml

用于指定激活的环境(test 或 prod),并可存放公共配置(所有环境共享的配置):

# application.yml
spring:
  profiles:
    active: test  # 这里指定激活哪个环境,test 对应测试环境,prod 对应生产环境

# 以下是公共配置(所有环境都会用到的配置,如服务端口、日志级别等)
server:
  port: 8080  # 若各环境端口不同,可在对应环境配置中覆盖

logging:
  level:
    root: INFO
② 测试环境配置:application-test.yml

存放测试环境特有的配置(如测试数据库地址、测试服务域名等):

# application-test.yml
# 测试环境:本地或测试服务器配置
custom:
  domain: "http://test-server:10015"  # 测试环境的服务域名
  file:
    upload-path: "/data/test/upload"  # 测试环境文件上传路径
  database:
    url: "jdbc:mysql://test-db:3306/test_db"
    username: "test_user"
    password: "test_pwd"
③ 生产环境配置:application-prod.yml

存放生产环境特有的配置(如生产数据库地址、生产服务域名等):

# application-prod.yml
# 生产环境:正式服务器配置
custom:
  domain: "http://prod-server:10015"  # 生产环境的服务域名
  file:
    upload-path: "/data/prod/upload"  # 生产环境文件上传路径
  database:
    url: "jdbc:mysql://prod-db:3306/prod_db"
    username: "prod_user"
    password: "prod_pwd"  # 生产环境密码建议通过环境变量注入,此处仅示例

2. 配置生效逻辑

  • 激活规则application.yml 中的 spring.profiles.active=test 会自动加载 application-test.yml 中的配置;若改为 spring.profiles.active=prod,则加载 application-prod.yml
  • 配置优先级:环境配置文件(test/prod)中的配置会覆盖主配置文件(application.yml)中相同的配置(如端口、域名等);不同的配置会合并生效。

3. 在代码中使用配置

通过 @Value@ConfigurationProperties 注解读取配置,Spring 会自动根据激活的环境获取对应的值:

示例:读取域名配置
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class EnvConfig {

    // 读取环境中的 domain 配置(test 或 prod 中的值)
    @Value("${custom.domain}")
    private String domain;

    // 其他配置...
    @Value("${custom.file.upload-path}")
    private String fileUploadPath;

    // getter/setter
    public String getDomain() {
        return domain;
    }
}

4. 动态切换环境(无需修改配置文件)

实际部署时,可通过启动参数覆盖 spring.profiles.active 的值,无需修改 application.yml

测试环境启动(命令行):
java -jar your-project.jar --spring.profiles.active=test
生产环境启动(命令行):
java -jar your-project.jar --spring.profiles.active=prod
IDE 中配置(以 IntelliJ IDEA 为例):

在启动配置的 Program arguments 中添加:

--spring.profiles.active=test  # 或 prod

总结

  • application.yml:指定激活的环境,存放公共配置;
  • application-test.yml:测试环境专属配置;
  • application-prod.yml:生产环境专属配置;
  • 通过 spring.profiles.active 动态切换,实现环境隔离,避免频繁修改配置文件。

这种方式符合 Spring Boot 最佳实践,便于开发、测试和生产环境的配置管理。

更多推荐