springboot去读yml配置文件中的属性值
- springboot去读yml配置文件中的属性值
- 读取yml中的数组配置
- 注入方式1:
- 注入方式2:
- 注入方式3:
- 测试代码:
- yml文件配置方式1:以逗号形式分割多个值
- yml文件配置方式2:使用列表的形式配置
springboot去读yml配置文件中的属性值
读取yml中的数组配置
注入方式1:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "my")
public class MyProperties {
private String[] array;
}
注入方式2:
【注意:使用配置类 + @ConfigurationProperties 方式时,类中的属性名称需要和yml文件中的叶子节点属性字段key保持一致。yml中的中划线会指定映射成 Bean 对象的 驼峰。例如:yml中 district-code,会自动映射到java类中的 districtCode 属性上】
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Data
@Component
@ConfigurationProperties(prefix = "my")
public class MyProperties2 {
private List<String> array;
}
注入方式3:
在spring容器管理的类里使用@value注解注入yml中属性值
@Value("#{'${my.array}'}") // 注意这里的单引号和花括号的使用
private List<String> myArray;
或者
@Value("${my.array}")
private List<String> syncDataDistrictCodes;
以上两种没有默认值,如果yml中没有配置,程序启动时会报错:
Could not resolve placeholder 'my.array' in value "#{'${my.array}'}"
再或者(注意这里边带冒号,冒号后边指定默认值,如果只写了个冒号,没有指定默认值,List注入的是 空的列表,不是null)
@Value("${my.array:}")
private List<String> syncDataDistrictCodes;
测试代码:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("test")
public class TestController {
@Value("#{'${my.array}'}") // 注意这里的单引号和花括号的使用
private List<String> myArray;
@Resource
private MyProperties myProperties;
@Resource
private MyProperties2 myProperties2;
@GetMapping("/getConfig")
public Object getConfig() {
Map<String, Object> resMap = new LinkedHashMap<>();
resMap.put("@value注入", myArray);
resMap.put("配置类注入myProperties-myArray", myProperties.getArray());
resMap.put("配置类注入myProperties2-strList", myProperties2.getArray());
return resMap;
}
}
yml文件配置方式1:以逗号形式分割多个值
my:
array: value1,value2,value3
请求测试接口输出结果:
{
"@value注入": [
"value1",
"value2",
"value3"
],
"配置类注入myProperties-myArray": [
"value1",
"value2",
"value3"
],
"配置类注入myProperties2-strList": [
"value1",
"value2",
"value3"
]
}
总结:三种注入方式均可正常注入
yml文件配置方式2:使用列表的形式配置
my:
array:
- value1
- value2
- value3
注入方式3的代码加上后,项目无法启动,报错:
Could not resolve placeholder 'my.array' in value "#{'${my.array}'}"
注释掉该方式的代码,继续测试使用配置类方式注入的两个方式,
调用测试接口,结果输出如下:配置类中使用数据注入正常,使用 List 无法正常注入
{
"配置类注入myProperties-myArray": [
"value1",
"value2",
"value3"
],
"配置类注入myProperties2-strList": [
"value1",
"value2",
"value3"
]
}
总结:
1、使用@value注解方式注入 程序无法启动;
2、使用 配置类的2种均可可正常注入;
tips:复杂的属性配置建议使用配置类进行属性注入