配置檔案-yaml
在spring Boot開發中推薦使用yaml來作為配置檔案。
基本語法:
-
key: value;kv之間有空格
-
大小寫敏感
-
使用縮排表示層級關係
-
縮排不允許使用tab,只允許空格
-
縮排的空格數不重要,只要相同層級的元素左對齊即可
-
'#'表示註釋
-
字串無需加引號,如果要加,''與""表示字串內容 會被 轉義/不轉義
資料型別:
可以使用的資料型別有date\boolean\string\number\null
-
單個字面量:
k: v #k:空格v
-
物件,鍵值對的集合,包括:map、hash、set、object
-
普通寫法:
k: k1: v1 k2: v2 k3: v3
-
行內寫法
k: {k1: v1,k2: v2,k3: v3}
-
-
陣列:一組按次序排列的值。array、list、queue
-
普通寫法:
k: - v1 - v2 - v3
-
行內寫法
k: [v1,v2,v3]
-
編寫之前,我需要配置yaml中的提示外掛:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
如果在打包的時候不需要打包該外掛,可以在外掛中設定如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
安裝完成後,需要啟動一下專案,讓他生效。
例項:
Person類:
@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String userName;
private Boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String, Object> score;
private Set<Double> salarys;
private Map<String, List<Pet>> allPets;
}
Pet類:
@Data
public class Pet {
private String name;
private Double weight;
}
在recources資源目錄下建立application.yaml檔案,使用yaml表示上述的屬性:
person:
user-name: xbhog
boss: false
birth: 2021/7/27
age: 18
pet: {name: 阿毛,weight: 23}
interests: [唱歌,跳舞,玩遊戲]
animal:
- jerry
- mario
score:
english: 30
math: 70
#第二種寫法:score: {english: 30,math: 70}
salarys:
- 277
- 8999
- 10000
all-pets: #該allPet有兩個k(sick、health),每個key包含一個list
sick:
- {name: tom}
- {name: jerry,weight:47}
health: [{name: mario,weight: 47}]
建立一個controller來測試我們的配置檔案有沒有生效:
因為我們之前已將將person中的屬性對映到了application.yaml檔案中,並且把person加入到容器中。
@Component
@ConfigurationProperties(prefix = "person")
所以我們在myconfig中做測試:
package com.xbhog.controller;
import com.xbhog.popj.Car;
import com.xbhog.popj.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@Autowired //自動配置,找到容器中的person
Person person;
@RequestMapping("/person")
public Person person(){
return person;
}
}
結果如圖所示:
Web開發之簡單功能分析
靜態資源的訪問問題
只有靜態資源放在以下的檔案目錄中才可以:
/static/、public/、 resources/ 、META-INF/resources
最後一個測試沒有成功,訪問META-INF/resources/img.png返回404,如果有感興趣的小夥伴可以測試一下。
訪問的方法是:當前專案根路徑/ + 靜態資源名 (localhost:8080/xxx.img)
假如我們的請求路由跟圖片的名字重複了,spring boot是先請求哪個呢?
我們建立一個controller:
package com.xbhog.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class mycontro {
@RequestMapping("/publicimg.png")
public String demo(){
return "asss";
}
}
讓它與public資料夾下面的圖片相同:
開啟主程式測試結果如下:
當我們隨便請求一個不存在的圖片,會返回給我們404.
從上面可以看出來,請求進來,先去找Controller看能不能處理。不能處理的所有請求又都交給靜態資源處理器。靜態資源也找不到則響應404頁面
改變預設的靜態資源的路徑:
在application.yaml檔案中:
spring:
mvc:
static-path-pattern: /res/**
這樣我們訪問資源的時候必須啊要加res字首.
但是在歡迎頁支援和自定義Favicon上需要關掉·tatic-path-pattern
.如果開啟的話,index.html與favicon是不起效果的。
如果設定favicon設定的完後,不起作用,可以禁用下瀏覽器快取或者重啟下idea.
設定的方式(直接放到靜態資原始檔夾下即可):
直接訪問localhost:8080即可看見
參考:
結束:
如果你看到這裡或者正好對你有所幫助,希望能點個關注或者推薦,感謝;
有錯誤的地方,歡迎在評論指出,作者看到會進行修改。