写法:
# 自定义参数
custom:
value: 张三
value1: "张三"
获取方式1:
使用@Value配合spel表达式进行赋值
@Value("${custom.value}")
private String value;
@Value("${custom.value1}")
private String value1;
注意:在
${}
中不能有空格
获取方式2:
这是通用的获取方式,具体参考文末
数组和集合的写法一样,只是接收是定义的类型不一致
custom:
# arr1: "12","3","4" 错误写法:ParserException
#元素之间以逗号分隔,可以用数字类型接收,注意数字类型的范围
#底层是String的转换,convert java.lang.String to byte
arr1: 1,2,3
arr2: "1,2,3"
获取方式
// int[]接收
@Value("${custom.arr1}")
private int[] arr1;
// List接收
@Value("${custom.arr2}")
private List<String> arr1;
custom:
# 中括号包裹,以逗号分隔
arr2: ["1,2", 3.6, 4/2]
**注意:**不能使用@Value方式读取值,只能使用通用方式读取值
custom:
arr3:
- "1,2"
- "2"
- "3"
**注意:**不能使用@Value方式读取值,只能使用通用方式读取值
custom:
bean:
#以下属性必须和对象的属性名(get方法)一致才能封装进去
id: 20
name: 张三
**注意:**不能使用@Value方式读取值,只能使用通用方式读取值
custom:
map:
#键: 值
a: mapa
b: mapb
map2: {a: map2a,b: map2b} #注意冒号后有个空格,逗号分隔
**注意:**不能使用@Value方式读取值,只能使用通用方式读取值
custom:
# 集合存Map
listmap1:
- {a: map1a,b: map1b}
- {a: map2a,b: map2b}
listmap2:
- a: a
b: b
- c: c
d: d
#map存list
maplist:
a:
- lista1
- lista2
b: ["listb1","listb2"]
#集合存对象
listbean:
- id: 20
name: 张三
- id: 20
name: 张三
#Map存对象
mapbean:
bean1:
id: 20
name: 张三
bean2:
id: 20
name: 张三
**注意:**不能使用@Value方式读取值,只能使用通用方式读取值
# 自定义参数
custom: #通用方式必须多一级
value: 张三
bean:
id: 20
name: 张三
arr1: "-1280,3,4"
arr2: [1, 3.6, 42]
arr3:
- "1,2"
- "2"
- "3"
list1: "list1a,list1b" #"list1a,list1b","list1a,list1b" 错误
list2: ["list1,a","list1b"]
list3:
- list2a
- list2b
map:
a: mapa
b: mapb
map2: {a: map2a,b: map2b}
listmap1:
- {a: map1a,b: map1b}
- {a: map2a,b: map2b}
listmap2:
- a: a
b: b
- c: c
d: d
maplist:
a:
- lista1
- lista2
b: ["listb1","listb2"]
listbean:
- id: 20
name: 张三
- id: 20
name: 张三
mapbean:
bean1:
id: 20
name: 张三
bean2:
id: 20
name: 张三
package com.example;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@Component //添加到spring容器中,方便使用@Autowired注入
@ConfigurationProperties(prefix = "custom") //设置前缀,必须
public class YmlConfiguration {
/**
* 获取yml中的值
* 注意:
* 1、成员变量名称(实质是set方法)需要和配置的自定义参数名称一致
* 2、每个成员变量必须要有 get/set方法
* 3、封装bean对象时,需要bean中有yml中bean子属性的get/set方法
* 4、该类必须使用注解ConfigurationProperties修饰
*/
private String value;
private User bean;
private int[] arr1;
private Integer[] arr2;
private String[] arr3;
private List<String> list1;
private List<String> list2;
private List<String> list3;
private Map<String, String> map;
private Map<String, String> map2;
private List<Map<String, String>> listmap1;
private List<Map<String, String>> listmap2;
private Map maplist;
private List<User> listbean;
private Map<String,User> mapbean;
//省略geter/seter方法
}
异常信息片段:Reason: No setter found for property: XXX
异常原因:没有对应的setXXX方法
解决方法:检查set方法和自定义参数是否一致,或没设置set方法
异常信息片段:BeanCreationException: Error creating bean with name 'whiteConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'XXX' in value "${XXX}"
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'XXX' in value "${XXX}"
异常原因:
yml配置中没有XXX参数
**解决方法:**检查yml参数和 V a l u e ( " Value(" Value("{XXX}")中的一致
使用 V a l u e ( " Value(" Value("{XXX}")的方式读取yml自定义参数,当参数类型不支持这种方式获取,如读取bean对象
**解决方法:**使用通用方式