一.学习背景
在SpringBoot项目中,读取配置文件时,默认读取application.properties文件,但往往比较大的项目时会有很多配置文件,这就导致在运行代码时,到底是运行哪个配置文件呢?
二.代码
编写配置类实现EnvironmentAware接口,代码如下:
@Configuration
public class ApplicationConfig implements EnvironmentAware {
private Environment environment;
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
public String getProperty(String key) {
String value = this.environment.getProperty(key);
return value;
}
}
setEnvironment是EnvironmentAware接口中的方法,因此必须要实现,在方法中把获取当前的配置文件(默认是获取application.properties文件),getProperty方法是根据当前读取的配置文件获取对应的值,比如有两个配置文件,分别为application.properties和application-dev.properties
内容分别为
project.name="demotest"和
project.name="demo-devtest"
三.编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class EnvironmentAwareTest {
@Resource
private ApplicationConfig applicationConfig;
@Test
public void test(){
String value=applicationConfig.getProperty("project.name");
System.out.println(value);
}
}
运行以上代码,打印出:demotest
如果修改代码如下:
@RunWith(SpringRunner.class)
@ActiveProfiles("dev")
@SpringBootTest
public class EnvironmentAwareTest {
@Resource
private ApplicationConfig applicationConfig;
@Test
public void test(){
String value=applicationConfig.getProperty("project.name");
System.out.println(value);
}
}
运行代码输出如下:demo-devtest
从以上可以看出:当不指定
ActiveProfiles时,运行的是application.properties配置文件,当指定ActiveProfiles时即运行是对应的配置文件。