需求
想分辨一下test/prod环境,然后根据环境做一下逻辑处理,比如为测试环境添加了一个通用密码。。。当然这样不太好,不要学我。
实现
一开始我是想通过application.yml文件里面设置的
spring: profiles: active: local
来判断的,后来代码写了个bug误以为没起效,就又研究了一下其他方式,当然这种方式实际上是没问题的。现在把这几种方式都记录一下,以供参考。
读取配置文件方式
首先配置文件内容如下:
spring: profiles: active: local
读取方式直接读就可以:
@Value(value = "${spring.profiles.active}") private String env;
下面代码里就可以直接用了。
Environment方式
一开始我想自己把这个对象new出来,后来发现自己这样做完全忽视了spring的ioc容器,明明直接注入就好了呀,代码如下:
@Autowired private Environment environment; public void justTest() { String profile=org.springframework.util.StringUtils.arrayToCommaDelimitedString( environment.getActiveProfiles()); System.out.println("system spring profiles active is "+profile); }
系统变量方式
public void justTest() { String profile=System.getenv().getOrDefault("SPRING_PROFILES_ACTIVE","local"); System.out.println("system spring profiles active is "+profile); }
我这里get的是SPRING_PROFILES_ACTIVE,是因为我们是通过docker方式设置的profiles,变量名是这个,docker启动命令如下
docker run --privileged=true --cap-add=SYS_PTRACE -it -d -e "SPRING_PROFILES_ACTIVE=test" -v /opt/logs:/logs --name atest -p 8989:8080 registry.cn-beijing.aliyuncs.com/test-web:1.0.0