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複製代碼
相關文章
相關標籤/搜索