SpringBoot 之多环境切换

本文详细介绍了SpringBoot中如何通过多种方式配置不同环境,包括使用多profile文件、yml文档块、POM自定义属性及打包时指定环境,旨在帮助开发者灵活切换应用环境。

java -jar xxx.jar --server.port=8080
java -jar xxx.jar --server.port=8081

上面的启动命令可以指定配置属性。

1、SpringBoot自带指定环境

多profile文件形式

  • 格式:application-{profile}.properties/yml,如:application-dev.properties、application-prd.properties等。
  • Spring Boot 默认都是从全局配置文件 application.propertiesapplication.yml 进入开始读取配置。
  • 可以使用约定格式application-{profile}.properties/yml写任意多的配置文件。
  • 然后在全局配置文件 application.properties/yml 激活它们即可,使用spring.profiles.active=dev

application-dev.properties

test.name=vermouth.dev
server.port=8081

application-prd.properties

test.name=vermouth.prd
server.port=8082

yml文档块形式

yml 文件支持多文档块方式,同一个yml文件中,可以使用"—"来区分不同的文档,相当于不同的配置文件。
application.yml

spring:
  profiles:
    active: prd

---
server:
  port: 8083
spring:
  profiles: dev

---
server:
  port: 8084
spring:
  profiles: prd  #指定属于哪个环境

激活指定profile的几种方式

  • 在全局配置文件中指定:spring.profiles.active=dev
  • 命令行:java -jar spring-boot.jar --spring.profiles.active=dev
  • 在IDEA中配置虚拟机参数:-Dspring.profiles.active=dev

上面的配置会激活application-dev.properties配置文件。

2、通过POM自定义属性值指定环境

把环境信息配置在不同的文件夹中,在编译打包时根据pom配置加载不同文件夹下的配置文件即可。
1、创建不同环境的配置文件夹及配置文件
在这里插入图片描述
2、修改pom文件

<properties> 
    <env>prd</env>
</properties>
    
<build>
	<!-- 指定打包后的文件名-->
	<finalName>${project.artifactId}-${env}-${project.version}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/conf/${env}</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

3、编译打包
指定evn值为prd,发现只加载了conf/prd文件夹下的配置文件。
同理,如果指定env值为dev,只会加载conf/dev文件夹下的配置文件。
在这里插入图片描述

3、打包时指定POM中的profile值指定环境

把环境信息配置在不同的配置文件中,在编译打包时加载不同的配置文件即可。
1、创建多个配置文件
application.properties:

spring.profiles.active=@profileActive@

application-dev.properties:

test.name=vermouth.dev

application-prd.properties:

test.name=sherry.prd

2、修改pom文件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>application*.properties</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <!-- 根据打包时激活的profile来包括对应的配置文件 -->
                <include>application.properties</include>
                <include>application-${profileActive}.properties</include>
            </includes>
        </resource>
    </resources>
</build>

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <!-- 如果未指定环境,默认dev-->
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
    </profile>
    <profile>
        <id>prd</id>
        <properties>
            <profileActive>prd</profileActive>
        </properties>
    </profile>
</profiles>

3、打包
命令打包指定环境:

mvn clean package -P prd

IDEA 工具打包指定环境:

如下图可见,打包后就只加载了application.properties和application-prd.properties,且application.properties文件中的spring.profiles.active=prd
在这里插入图片描述

<think>好的,我现在需要帮助用户了解如何在Spring Boot中通过yml文件实现多环境配置的切换。首先,我得回顾一下Spring Boot的配置机制,尤其是多环境配置的相关知识。记得Spring Boot支持Profile的概念,允许根据不同的环境加载不同的配置。用户提到了使用yml文件,所以需要重点讲解如何利用application.yml及类似命名的文件来管理多环境配置。 首先,应该介绍默认的配置文件application.yml,然后说明如何为不同环境创建特定的配置文件,比如application-dev.yml、application-prod.yml等。接下来,需要解释如何通过设置spring.profiles.active属性来激活特定的环境配置。此外,可能还需要提到如何在同一个yml文件中使用分隔符来分隔不同环境的配置,不过更常见的做法是使用多个文件。 然后,用户可能需要具体的示例来理解如何操作。我需要给出一个示例结构,展示各个配置文件的内容,并说明如何通过命令行、系统变量或IDE配置来切换环境。同时,要确保示例中的YAML语法正确,比如缩进和冒号的使用。 另外,需要注意引用用户提供的参考内容,特别是引用[1]和引用[2]中的信息。比如,引用[2]提到多环境配置的实现方式,特别是使用Profile,这部分需要结合到回答中,并在适当的地方添加引用标识。 还需要检查是否有遗漏的点,比如是否要提到配置的优先级,或者如何覆盖默认配置。可能用户还会关心如何测试不同环境的配置是否生效,可以建议使用Actuator的env端点来验证当前激活的Profile。 最后,生成相关问题时要确保问题与多环境配置相关,比如如何设置默认环境、配置覆盖顺序、动态切换环境的方法,以及如何结合Maven或Gradle进行配置管理。这些问题应该能帮助用户进一步探索该主题。 总结一下,回答的结构应该包括多环境配置的实现步骤、示例代码、配置切换方法以及验证方式,并在适当的位置添加引用。同时,确保使用正确的YAML格式和Spring Boot的配置语法,避免常见的错误,比如缩进问题或属性名称错误。</think>在Spring Boot中,通过yml文件实现多环境配置切换主要依赖**Profile**机制和**多配置文件**的设计。以下是具体实现方法和示例: --- ### 一、多环境配置实现步骤 1. **创建环境专用yml文件** 默认配置文件为`application.yml`,其他环境配置文件命名格式为`application-{profile}.yml`,例如: - `application-dev.yml`(开发环境) - `application-test.yml`(测试环境) - `application-prod.yml`(生产环境) 2. **配置环境激活** 在`application.yml`中通过`spring.profiles.active`指定默认激活的环境: ```yaml spring: profiles: active: dev # 默认激活开发环境 ``` 3. **环境隔离配置** 在环境专用文件中编写对应配置,例如`application-dev.yml`: ```yaml server: port: 8080 datasource: url: jdbc:mysql://localhost:3306/dev_db username: dev_user password: dev_pass ``` --- ### 二、配置切换方法示例 #### 方式1:通过启动参数切换 ```bash java -jar your-app.jar --spring.profiles.active=prod ``` #### 方式2:通过系统变量切换 ```bash export SPRING_PROFILES_ACTIVE=test java -jar your-app.jar ``` #### 方式3:IDE运行配置 在IntelliJ/Eclipse的启动配置中添加VM参数: ``` -Dspring.profiles.active=test ``` --- ### 三、多环境配置示例 1. **默认配置文件 `application.yml`** ```yaml spring: profiles: active: dev # 默认环境 logging: level: root: INFO ``` 2. **开发环境 `application-dev.yml`** ```yaml server: port: 8080 datasource: url: jdbc:mysql://localhost:3306/dev_db username: dev_user password: dev_pass ``` 3. **生产环境 `application-prod.yml`** ```yaml server: port: 80 datasource: url: jdbc:mysql://prod-server:3306/prod_db username: prod_user password: ${DB_PASSWORD} # 使用环境变量注入敏感信息 ``` --- ### 四、配置优先级与覆盖规则 1. 优先级顺序:命令行参数 > 系统变量 > `application-{profile}.yml` > `application.yml`[^2] 2. 同名配置项会被更高优先级的配置覆盖 --- ### 五、验证配置生效 1. 启动时查看控制台日志: ``` The following profiles are active: prod ``` 2. 通过Spring Boot Actuator的`/env`端点检查当前配置 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值