1 ConfigurationProperties注解
1.1 编写对应的实体类
实体类中的字段名要与yaml文件中的节点名一一对应。
@ConfigurationProperties(prefix)
注解告诉Spring需要将配置文件中的值映射到该类中,prefix的值要编写yml配置文件中对应的节点名称。@ConfigurationProperties默认从全局配置文件中获取值。
同时请注意,对应的实体类也应添加到Spring容器中,所以应该添加@Component注解。
package cc.fireflyhut.selftech.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
@ConfigurationProperties(prefix = "user") // 对应配置文件最外层节点,即user节点
public class YamlConfigHolder {
// 对应user节点内的username节点
private String username;
// 同上
private List<String> grants;
private Map<String, Object> info;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<String> getGrants() {
return grants;
}
public void setGrants(List<String> grants) {
this.grants = grants;
}
public Map<String, Object> getInfo() {
return info;
}
public void setInfo(Map<String, Object> info) {
this.info = info;
}
@Override
public String toString() {
return "YamlConfigTest{" +
"username='" + username + '\'' +
", grants=" + grants +
", info=" + info +
'}';
}
}
如果对应的类中出现如下图的提示,请到SpringBoot的官方文档中找到配置文件注解处理机依赖添加到pom文件中。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
1.2 修改yaml配置文件
在yaml配置文件中添加如下内容
user:
username: mama
grants:
- accessSys
- changeAll
- shutdown
info: {age: 16, gender: male, profession: coder}
或者properties文件请使用如下写法。
user.username=mama
user.grants=accessSys, changeAll, shutdown
user.info.age=16
user.info.gender=male
user.info.profession=coder
1.3 编写测试类并运行
@SpringBootTest
class MyYamlTest {
@Autowired
private YamlConfigHolder yamlConfigHolder;
@Test
public void testGetValueFromYaml() {
System.out.println(yamlConfigHolder);
}
}
2 Value注解
通过@Value注解注入变量,人尽皆知,懒得写了
3 PropertySource注解
仅能从properties配置文件中获取值。它可以不从默认的全局配置文件中获取值,而可以从自定义的配置文件中拿到值,只需要传入配置文件的位置即可。它有一个名为value的参数,需要传入配置文件的位置。其他用法和ConfigurationProperties注解类似。
@PropertySource(value = "classpath:redis.properties")
public RedisConfig {
//...
}