【SpringBoot】多环境配置及多环境打包

一、多环境配置

1、配置文件优先级

配置文件可以放在哪些目录?

加载优先级从高到低排序,file就是项目路径,classpath是resources路径
项目根目录下的config文件夹>项目根目录>resource目录下的config文件夹>resource路径下

2、多环境配置

1)多环境properties

如果我们使用properties配置文件,想要哪个文件里的配置生效
使用spring.profiles.active=,后面加上对应环境的标签即可
在这里插入图片描述

2)多环境yaml文件

如果我们使用yaml配置文件,想要哪个文件里的配置生效
使用spring.profiles.active=,后面加上对应环境的标签即可

  • 方式一:定义在一个yaml文件中,用---分割
server:
  port: 8080

spring:
  profiles:
    active: test
---

server:
  port: 8081
spring:
  config:
    activate:
      on-profile: dev

---

server:
  port: 8082
spring:
  config:
    activate:
      on-profile: test

效果如图所示
在这里插入图片描述

  • 方式二:定义在多个配置文件中

默认配置文件 application.yaml;任何时候都会加载
指定环境配置文件 application-{env}.yaml

同名配置项,profile配置优先
可以理解为会使用指定环境配置文件中的同名配置项覆盖默认配置文件中的值
在这里插入图片描述

3、@Profile注解

@profile注解的作用是指定类、方法或者注解在特定的Profile环境生效
例如某个类或者方法上添加了@Profile("prod")注解,那么这个类只在启用生产环境的情况下才生效

package com.decade.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "people")
@Validated
@Profile("prod")
public class People {

    @NotBlank(message = "该字段不可为空")
    private String name;
    private Integer age;
    private Boolean isHappy;
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> list;
    private Dog dog;
}

任何@Component@Configuration注解的类都可以使用@Profile注解
它可以加在类、方法和注解上面

4、配置组profiles group

有时候,我们会将某个环境的配置拆到不同的配置文件中,比如数据库和消息中间件的配置
这时候我们就需要在application.properties中定义一个配置组

spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq

然后使用spring.profiles.active=production 激活两个配置文件中的配置

二、多环境打包

多环境打包其实主要还是和maven有关

假设我们的项目有三个环境,开发dev、测试test以及生产prod
如果服务启动端口在三个环境都不相同,如下图,我们在application.yaml中
将spring.profiles.active后面的值与pom.xml中的变量environment关联起来

在这里插入图片描述

为了实现多环境打包,我们就需要在pom文件中添加如下声明

<!-- 打包需要引入对应环境的配置文件 -->
<build>
    <resources>
        <!-- 将所有application开头的yaml文件排除,可以排除多个 -->
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>application*.yaml</exclude>
            </excludes>
        </resource>

        <!-- 根据激活条件引入打包所需的配置文件,可以引入多个 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>application.yaml</include>
                <include>application-${environment}.yaml</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<!-- 环境配置 -->
<profiles>
    <profile>
        <!-- 环境id -->
        <id>dev</id>
        <activation>
            <!-- 是否默认启用 -->
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <!-- 环境标签变量,在yaml中会被用到 -->
            <environment>dev</environment>
        </properties>
    </profile>
    <profile>
        <id>test</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <environment>test</environment>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <environment>prod</environment>
        </properties>
    </profile>
</profiles>

我们重新编译项目后,就可以勾选相关环境进行打包了
假如我们勾选test测试环境,启动项目后,观察服务端口是否为8084
在这里插入图片描述

如有错误,欢迎指正!!

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值