【SpringBoot】多环境配置及多环境打包
简单介绍spring boot的多环境配置以及如何使用maven进行多环境打包
一、多环境配置
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)