一、@Value注解
使用该注解需要注意:
(1)该类必须注入spring容器中,才能使用@Value注解获取配置文件中的数据。
(2)配置文件里必须有该属性,不然启动会报异常。
@Component
public class Demo {
// @Value("${user.name:默认值}") 为了不报异常,可以加默认值,如果是:"${user.name:}",表示值为""
@Value("${user.name}")
private String userName; // 如果属性有static和final关键字的话是无法生效的
}
二、@ConfigurationProperties注解
只需要指定配置文件中某一个key的前缀就可以了。例如:
// 配置文件
demo:
userName: xxx
// Demo
@ConfigurationProperties(prefix = "demo")
public class Demo {
private String userName;
}
三、通过Environment类动态获取(是spring底层提供的API)
(1)第一种实现方式,实现 EnvironmentAware 接口,重写 setEnvironment 方法
@SpringBootTest
public class Demo implements EnvironmentAware {
private Environment env;
@Test
public void test() {
String var = env.getProperty("demo.name");
System.out.println("从配置文件获取" + var);
}
@Override
public void setEnvironment(Environment e){
this.env = e;
}
}
(2)第二种通过自动注入
@SpringBootTest
public class Demo {
@Resource
private Environment env;
@Test
public void test() {
String var = env.getProperty("demo.name");
System.out.println("从配置文件获取" + var);
}
}
以上三种是获取默认的配置文件,要想获取自定义的配置文件可以通过下面的方法:
- 默认的配置文件:application开头
- 自定义:demo.properties
四、@PropertySource注解
只能获取properties的配置文件。
@Configuration
@PropertySources(@PropertySource(value = "classpath:demo.properties",encoding = "utf-8"))
public class Demo {
@Value("${user.name}")
private String name;
}
要想获取yml的需要设置配置类。
@Configuration
public class MyYmlConfig {
@Bean
public static PropertySourcesPlacehokderConfigurer yamlConfigurer() {
PropertySourcesPlacehokderConfigurer p = new PropertySourcesPlacehokderConfigurer();
YamlPropertiesFactory y = new YamlPropertiesFactory();
y.setResources(new ClassPathResource("demo.yml"));
p.setProperties(Objects.requireNonNull(y.getObject()));
return p;
}
}
然后就可以通过第一种方式@Value注解获取。