SpringBoot @Value 读取配置文件

@Value读取配置文件yml中的数据list、map、string

接下来用一个简单地示例来说解:c#

  • 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中单引号和双引号的区别

"":双引号;不会转义字符串里面的特殊字符;特殊字符会做为自己想表示的意思app

information1: "gavin \n 年龄18"输出
information1: gavin 
 年龄18复制代码

'':单引号;会转义特殊字符,特殊字符终只是一个普通的字符串数据ide

information2: 'gavin \n 年龄18'输出
information2: gavin \n 年龄18复制代码