【Java后端】SpringBoot配置多个环境(开发、测试、生产)

Spring Boot 中配置多个环境(开发、测试、生产)通常用 配置文件分环境管理 + 启动参数切换 的方式来实现。下面一个完整的实践指南:


🔹 1. 使用多配置文件管理环境

Spring Boot 默认支持 application-{profile}.propertiesapplication-{profile}.yml 文件。

常见方式是创建以下配置文件:

复制代码
src/main/resources/
 ├── application.yml              # 通用配置(所有环境共享)
 ├── application-dev.yml          # 开发环境配置
 ├── application-test.yml         # 测试环境配置
 └── application-prod.yml         # 生产环境配置

示例:

application.yml(通用配置)

yaml 复制代码
spring:
  application:
    name: myapp
  profiles:
    active: dev   # 默认激活 dev 环境(可以通过启动参数覆盖)

application-dev.yml(开发环境)

yaml 复制代码
server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dev_db
    username: dev_user
    password: dev_pwd

application-prod.yml(生产环境)

yaml 复制代码
server:
  port: 8081

spring:
  datasource:
    url: jdbc:mysql://prod-server:3306/prod_db
    username: prod_user
    password: prod_pwd

🔹 2. 启动时指定环境

方法 1:在 application.yml 设置

yaml 复制代码
spring:
  profiles:
    active: dev   # 或 test / prod

方法 2:命令行参数(推荐,灵活)

bash 复制代码
# 启动时指定 dev 环境
java -jar myapp.jar --spring.profiles.active=dev

# 启动时指定 prod 环境
java -jar myapp.jar --spring.profiles.active=prod

方法 3:环境变量

bash 复制代码
export SPRING_PROFILES_ACTIVE=prod
java -jar myapp.jar

🔹 3. 使用 Profile 注解(可选)

如果你需要在代码里针对不同环境执行逻辑,可以用 @Profile 注解:

java 复制代码
@Service
@Profile("dev")
public class DevDataService implements DataService {
    @Override
    public String getData() {
        return "开发环境数据";
    }
}

@Service
@Profile("prod")
public class ProdDataService implements DataService {
    @Override
    public String getData() {
        return "生产环境数据";
    }
}

这样在 dev 环境只会加载 DevDataService,而生产环境只会加载 ProdDataService


🔹 4. 高级用法:组合 Profile

Spring Boot 支持 组合 Profile

例如在 application.yml 里:

yaml 复制代码
spring:
  profiles:
    group:
      dev: [common, mysql-dev]
      prod: [common, mysql-prod]

这样当 spring.profiles.active=prod 时,会自动加载 application-common.ymlapplication-mysql-prod.yml


总结

  • application-{profile}.yml 管理不同环境的配置。
  • 启动时用 --spring.profiles.active=xxx 指定环境。
  • 特殊逻辑可以用 @Profile 注解隔离。
  • 生产推荐用 命令行参数/环境变量 指定,而不是写死在配置文件。

相关推荐
白露与泡影1 小时前
2025年高质量Java面试真题汇总
java·python·面试
꒰ঌ 安卓开发໒꒱1 小时前
Java 面试 -Java基础
java·开发语言·面试
菠菠萝宝1 小时前
【Java八股文】13-中间件面试篇
java·docker·kafka·rabbitmq·canal·rocketmq·es
瓯雅爱分享3 小时前
基于Java后端与Vue前端的MES生产管理系统,涵盖生产调度、资源管控及数据分析,提供全流程可视化支持,包含完整可运行源码,助力企业提升生产效率与管理水平
java·mysql·vue·软件工程·源代码管理
不枯石3 小时前
Matlab通过GUI实现点云的最远点下采样(Farthest point sampling)
开发语言·图像处理·算法·计算机视觉·matlab
轩情吖4 小时前
Qt常用控件之QLabel(一)
开发语言·数据库·c++·qt·小程序·qlabel·桌面开发
hello_2505 小时前
k8s安全机制解析:RBAC、Service Account与安全上下文
java·安全·kubernetes
望获linux6 小时前
【实时Linux实战系列】实时安全 C++ 模式:无异常、预分配与自定义分配器
java·linux·服务器·开发语言·数据库·chrome·tomcat
码猩6 小时前
wordVSTO插件实现自动填充序号
开发语言·c#
多多*6 小时前
linux安装hbase(完)
java·分布式·算法·c#·wpf