@Value读取配置文件yml中的数据list、map、string
接下来用一个简单地示例来讲解:
- application.yml配置文件
server: port: 8096# listlist1: a,b,c# setset1: a,b,c,a,b# map# 对于map整体要用引号进行包裹,对于value值必须要包裹,key值可以不包裹map1: '{"name":"gavin","age":"18"}'# map1: '{name:"gavin",age:"19"}'复制代码
- ListConfig配置类
@Configuration@Datapublic class ListConfig {@Value("#{'${list1}'.split(',')}")private List<String> list1;/** *冒号后表示默认值,此处表示yml文件没有配置list2时,默认list2为空,此处返回list2=[] */@Value("#{'${list2:}'.split(',')}")private List<String> list2;/** *冒号后表示默认值,此处表示yml文件没有配置list2时,默认list2为空, * 若list2位空,则返回list3=null,否则正常返回 */@Value("#{'${list2:}'.empty ? null:'${list2:}'.split(',')}")private List<String> list3;/** *冒号后表示默认值,此处表示yml文件没有配置list4时,默认list4为g,此处返回list4=[g] */@Value("#{'${list2:g}'.split(',')}")private List<String> list4;/** *冒号后表示默认值,此处表示yml文件没有配置address时,默认address为asd,此处返回address=asd */@Value("${address:asd}")private String address;/** *set与list原理一致,只是对结果进行了去重操作,此处返回set1=[a, b, c] */@Value("#{'${set1}'.split(',')}")private Set<String> set1;@Value("#{${map1}}")private Map<String,String> map1; }复制代码
- controller 测试文件
RestController@RequestMapping("/hello")public class controller {@Autowiredprivate ListConfig listConfig;@GetMapping("/test1")public void test() { List<String> test=listConfig.getList1(); System.out.println("list1: "+test); //list1: [a, b, c]}@GetMapping("/test2")public void test2() { List<String> test=listConfig.getList2(); System.out.println("list2: "+test); //list2: [] }@GetMapping("/test3")public void test3() { List<String> test=listConfig.getList3(); System.out.println("list3: "+test); // list3: null}@GetMapping("/test4")public void test4() { List<String> test=listConfig.getList4(); System.out.println("list4: "+test); // list4: [g]}@GetMapping("/test5")public void test5() { String test=listConfig.getAddress(); System.out.println("address: "+test); // address: asd}@GetMapping("/test6")public void test6() { Set<String> test=listConfig.getSet1(); System.out.println("set1: "+test); // set1: [a, b, c]} // key = name, value = gavin// key = age, value = 18@GetMapping("/test7")public void test7() { Map<String,String> map=listConfig.getMap1();for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue()); } } }复制代码
yml中单引号和双引号的区别
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
information1: "gavin \n 年龄18"输出 information1: gavin 年龄18复制代码
'':单引号;会转义特殊字符,特殊字符终只是一个普通的字符串数据
information2: 'gavin \n 年龄18'输出 information2: gavin \n 年龄18复制代码