配置文件
- 我的配置文件是在resources下的application.yml,简单定义几个属性
root:
name: zhangsan
age: 21
@ConfigurationProperties
- 使用这个注解需要指定前缀prefix,然后会把属性直接帮我们注入进去
@Data
@ConfigurationProperties(prefix = "root")
@Component
public class EnvironmentTest {
private String name;
private int age;
@PostConstruct
public void sout(){
System.out.println(name);
System.out.println(age);
}
}
- 启动可以看到输出

@Value
@Data
@Component
public class EnvironmentTest {
@Value("${root.name}")
private String name;
@Value("${root.age}")
private int age;
@PostConstruct
public void sout(){
System.out.println(name);
System.out.println(age);
}
}
- 输出

Environment
@Component
class Test{
@Autowired
Environment environment;
@PostConstruct
public void sout(){
System.out.println(environment.getProperty("root.name"));
System.out.println(environment.getProperty("root.age"));
}
}
@PropertySource
- 一般自定义配置不跟项目配置文件放在一起,可以通过@PropertySource来指定文件,这个注解可以和前边的配合使用,
@Data
@PropertySource(value = "classpath:test.yml",encoding = "utf-8",factory = YamlPropertySourceFactory.class)
@ConfigurationProperties(prefix = "root")
@Component
public class EnvironmentTest {
private String name;
private int age;
@PostConstruct
public void sout(){
System.out.println(name);
System.out.println(age);
}
}
class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public org.springframework.core.env.PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
List<org.springframework.core.env.PropertySource<?>> load = loader.load(name, resource.getResource());
if (load!=null && !load.isEmpty()) {
return load.get(0);
}
return null;
}
}