办公室装修设计公司哪家好搜索引擎优化的作用是什么
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;@Resourceprivate MyProperties myProperties;@Resourceprivate 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:复杂的属性配置建议使用配置类进行属性注入