前言
通常我们开发不可能只有一个生产环境,还会有其它的开发,测试,预发布环境等等。为了更好的管理每个环境的配置项,springboot也提供了对应的环境隔离的方法。
直接上干货
知识点
激活环境方法
1,在application.properties或者yaml文件中配置:spring.profiles.active=环境1,环境2
2,命令行激活:java -jar xxx.jar --spring.profiles.active=环境1,环境2
补充
1,修改默认环境名称 spring.profiles.default=test;
2,不管激活哪个环境,这些环境都要有 spring.profiles.include= security 总是要生效的环境
3,对多环境进行分组:spring.profiles.group.name(你自己起名)=环境1,环境2
也可以这么写spring.profiles.group.name[0]=环境1
spring.profiles.group.name[1]=环境2
使用则相同:spring.profiles.active=name(group起的名)
补充相关注解:@Profile()
@Profile("dev") => 注解表示这个类只能在这些环境下生效, 如果值为"default"则表示:默认环境
注意
命名规范:application-(profiles标识).properties
代码测试
照例准备启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Applications {
public static void main(String[] args) {
SpringApplication.run(Applications.class, args);
}
}
准备配置文件application.properties
spring.profiles.active=dev
pro.b.value=b value in application
准备dev环境配置文件application-dev.properties
pro.a.value=this is dev
pro.b.value=b value in dev
testController类
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class ProfilesTestController {
@Value("${pro.a.value}")
private String a;
@Value("${pro.b.value}")
private String b;
@RequestMapping(method = RequestMethod.GET, path = "/profiles/test")
public void test1() {
log.info("测试激活环境是否生效" + a);
log.info("测试与application.properties中配置项冲突时,生效为哪个:" + b);
}
}
启动测试,测试结果如图所示
这里需要注意,尽可能不要去在不同的properties写相同的配置,如果你的代码中加了一些别的东西,例如常用的配置解密功能等操作property的功能时,会出现与预想结果之外的输出。如下图,我加入自定义解密之后的输出。
希望对各位看官老爷有帮助,如果可以的话,能否请各位老爷点个赞,关注一下博主呢,在这里非常感谢各位老爷了。