Spring Boot/Cloud读取配置文件yaml中的数据,包括:List、Map、Object、基本数据类型,并对@ConfigurationProperties与@Value的使用场景和方式进行比较。
microservice:baseyaml:strVaule: strVauleintValue: 10floatValue: 8.5booleanValue: falselistStrValue:abcdmapStrValue:name: gmHappyage: 32users:root:username: rootpassword: rootpassguest:username: guestpassword: guestpass
import java.util.List;
import java.util.Map;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = "microservice.baseyaml")
public class BaseYamlProperties {private String strVaule;private int intValue;private float floatValue;private boolean booleanValue;private List listStrValue;private Map mapStrValue;private Map users;@Datapublic static class Credential {private String username;private String password;}
}
microservice:valueyaml:listStrValue: a,b,c,dmapStrValue: "{key1: 'value1', key2: 'value2'}"
yaml文件中注入list注意事项:
@Value("#{'${microservice.valueyaml.listStrValue}'.split(',')}"): #{} 内是SpEL表达式,使用 split 函数指定了分隔符@Value("${microservice.valueyaml.listStrValue}}"):不指定分隔符则会默认以, 作为分隔符yaml文件中注入map注意事项:
key可以但不必被单引号''包围value必须被单引号''包围@Value("#{'${microservice.valueyaml.listStrValue}'.split(',')}")
private List listStrValue;@Value("#{${microservice.valueyaml.mapStrValue}}")
private Map mapStrValue;
#{…} 用于执行SpEl表达式,并将内容赋值给属性${…} 主要用于加载外部属性文件中的值#{…} 和 $ {…} 可以混合使用,但是必须#{}外面,${}在里面以下格式不可通过@Value读取的yaml文件示例:
microservice:valueyaml:listStrValue:- a- b- c- dmapStrValue:name: gmHappyage: 32
| 功能性 | @ConfigurationProperties | @Value |
|---|---|---|
| 功能 | 批量注入配置文件中的属性 | 一个个指定 |
| 松散绑定(松散语法) | 支持 | 不支持 |
| Spring EL表达式 | 不支持 | 支持 |
| JSR303数据校验 | 支持 | 不支持 |
| 复杂类型封装 | 支持 | 不支持 |