文章目录
- 配置文件
- @ConfigurationProperties
- @Value
- Environment
- @PropertySource
配置文件
- 我的配置文件是在resources下的application.yml,简单定义几个属性
root:
name: zhangsan
age: 21
@ConfigurationProperties
- 使用这个注解需要指定前缀prefix,然后会把属性直接帮我们注入进去
//通过getset方法注入属性,所以必须有
@Data
//会把name直接注入进来
@ConfigurationProperties(prefix = "root")
//测试所以直接让springboot扫描到了
@Component
public class EnvironmentTest {
private String name;
private int age;
//PostConstruct标注这是一个回调方法,会被springboot执行
@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
//不支持yml格式 可以自定义解析器 指定一个解析器就可以 其余的都会按照这个进行解析
//如果不想自定义那么可以使用properties后缀的配置文件
//我是定义到了resources下,比如在resources下的xxx文件夹下那么就是classpath:xxx/test.yml
@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);
}
}
//自定义yml解析类
class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public org.springframework.core.env.PropertySource> createPropertySource(String name, EncodedResource resource) throws IOException {
YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
List> load = loader.load(name, resource.getResource());
if (load!=null && !load.isEmpty()) {
return load.get(0);
}
return null;
}
}