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