1. 程式人生 > >SpringBoot開發詳解(二)--SpringBoot的配置檔案以及註解

SpringBoot開發詳解(二)--SpringBoot的配置檔案以及註解

轉載自:https://blog.csdn.net/qq_31001665/article/details/69938750

一、Spring Boot註解

通過上一篇文章,我們已經快速構建了一個spring boot的專案,那spring boot專案和我們之前使用的springMVC專案有什麼區別呢,這一篇我們就來聊一下spring boot為我們開發所帶來的便捷性以及配置檔案的使用。

二、建立一個controller

@RequestMapping("/round2")
@RestController
public class Round2Controller {

    @RequestMapping(method = RequestMethod.GET)
    public String round2(){
        return "ROUND 2";
    }
}

首先我們現在round1的基礎上新建一個controller層,返回一個固定的字串ROUND 2,用postman測試一下,可以順利訪問到。 

這裡要說明的兩個註解:

@RequestMapping,這是springMVC的註解,相信大家平時一定很多的使用到。

@RestController,這指該controller使用rest風格返回,返回的是json體,在該controller下的方法返回不用再使用@ResponseBody的註解。
 

三、修改配置檔案

spring boot中讀取配置檔案除了可以讀取properties字尾的檔案外,還引入了yml的讀取,用起來也是相當簡單,我們先把resource下的application.properties修改為yml檔案,接著在其中新增埠號9090。

這裡要注意的是yml這種檔案的格式,每一個屬性下的節點需要縮排,再一個是賦值需要在冒號後留一個空格的位置,一般我通常看idea的顏色變化,橘黃色代表格式正確,灰色則是格式有問題,修改完埠後我們再啟動下專案,發現埠已經變更為9090了,說明配置檔案生效了。 

四、自定義屬性以及@Value取值

除了我們一般使用yml來定義一些我們需要的屬性外yml還支援自定義屬性,在使用時只需要通過@Value來取值即可。那我們現在yml中新增一些屬性。

zzp:
  name: 朱正平
  age: 27
  height: 182cm
  weight: 75kg
  long: 18cm

然後我們在剛才的controller中新寫一個方法去使用@Value取值,我們可以看到我們想要獲取的配置資訊已經全部拿到了。

    @Value("${zzp.name}")
    private String name;

    @Value("${zzp.age}")
    private Integer age;

    @Value("${zzp.height}")
    private String height;

    @RequestMapping(value = "/zzp",method = RequestMethod.GET)
    public String getZZPInfo(){
        return "zzp.name:" + name + " zzp.age:" + age + " zzp.height:" + height;
    }

大家可能會覺得,哎呀,這還是太麻煩了,我如果有一百個屬性,那就要寫一百個@Value,而且我可能就一個方法用了一下,這樣我的程式碼太汙染了,有沒有其他方法可以變得更簡便,更優雅呢。答案是有的。 
我們可以建立一個pojo來接收配置檔案中的資訊,首先我們先建立一個實體類ZZPProperties,給予相一致的屬性,並給予set get方法以及重寫toString方法。 
這裡我們使用@Component註解來保證待會該pojo可以背spring容器所注入,使用@ConfigurationProperties(prefix = “zzp”)註解來獲取配置檔案中字首為zzp的配置,prefix指的是字首。
 

@Component
@ConfigurationProperties(prefix = "zzp")
public class ZZPProperties {

    private String name;

    private String height;

    private String weight;

    private Integer age;

    @Override
    public String toString() {
        return "ZZPProperties{" +
                "name='" + name + '\'' +
                ", height='" + height + '\'' +
                ", weight='" + weight + '\'' +
                ", age=" + age +
                '}';
    }
    //get set 方法
}

之後我們再來寫一個方法來獲取這個實體類,並且將放回型別直接修改為該實體類嗎,這樣可以直接返回一個實體類出去,更方便了,程式碼也更為整潔

    @Autowired
    private ZZPProperties zzpProperties;

    @RequestMapping(value = "/getZzpInfo",method = RequestMethod.GET)
    public ZZPProperties getZzpInfo(){
        return zzpProperties;
    }

測試一下結果

五、yml的其他用法

yml除了可以配置不同的屬性值之外,還有其他許多用途,例如

rand:
  str: ${random.value} #32位的隨機字串
  uuid: ${random.uuid} #uuid
  num: ${random.int(100)} #100內隨機整數
  num0: ${random.int(0,99)} #0-99內的隨機整數

六、yml不同檔案配置檔案

我們還可以通過yml來為我們配置不同的配置檔案,比如開發環境,測試環境,生產環境等等。我們使用 
application-dev.yml 
application-test.yml 
application-pro.yml 
來進行區分,而在原始的application.yml中我們可以設定使用那一個環境

spring:
  profiles:
    active: prod