這一章主要說springboot中日誌的配置、自定義屬性的配置與讀取、分環境的yml配置檔案(如本地環境、測試環境、生產環境等)。比較偏向實際開發,較為實用,前面一章的一些基本建立在這裡就不多廢話了。
1. springboot的日誌配置
在我們專案實際開發中,日誌是不可或缺的。只有巧用日誌才能快速發現線上問題並且定位線上問題並且解決!當然日誌也可用來平時的本地除錯,也可以快速定位程式碼的位置,跟debug搭配起來更好歐。
而springboot裡面使用的是Logback日至框架,並用INFO級別輸出到控制檯(日誌四個級別優先順序從高到低分別是 ERROR、WARN、INFO、DEBUG)
1)新增日誌依賴(其實不用)
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-logging</artifactId> 4 <version>2.1.6.RELEASE</version> 5 <scope>compile</scope> 6 </dependency>
但是!這裡我們可以在pom.xml裡找到 spring-boot-starter-web 依賴,點進去找到 spring-boot-starter 依賴。對沒錯,就是它,它裡面已經引入了logger,所以我們不用手動新增logger。不信?點選去看
2)日誌的使用
a) 首先建立一個config包,在包下建立一個LogConfig類,供其他所有類繼承並且列印日誌。
1 public class LogConfig { 2 3 protected static final Logger logger = LoggerFactory.getLogger(LogConfig.class); 4 }
b) 接著建立一個controller包,在包下建立一個LogController類,測試日誌的列印情況。這裡我們分別輸出四個級別的日誌,觀察控制檯。
1 @RestController 2 public class LogController extends LogConfig { 3 4 @RequestMapping("/log") 5 public String showLog() { 6 logger.debug("debug:Process in LogController.showLog method"); 7 logger.info("info:Process in LogController.showLog method"); 8 logger.warn("warn:Process in LogController.showLog method"); 9 logger.error("error:Process in LogController.showLog method"); 10 return "springboot log"; 11 } 12 }
c) 啟動之後,在位址列輸入localhost:8080/log回車,檢視控制檯,發現只輸出了info、warn、error三條日誌,並沒有debug。其實細心的朋友已經發現了原因,因為我們發現springboot啟動時列印的日誌都是info級別的,這是因為預設是info級別的,debug優先順序低於info,當然不顯示了。
3)日誌的配置
我們線上上就會發現它們的日誌其實都是儲存下來的,那麼如何儲存日誌檔案呢,就要開啟配置檔案yml做相關配置了。
a) file可以對日誌檔案命名。也可以定義建立的位置,file也可以加相對路徑,所以不用配path了,我的log檔案這樣配在了logger-resource專案下的log資料夾中命名為springboot-demo.log。重新啟動一下程式,就會飛發現log檔案已經生成了。
b) level可以指定路徑配置log級別,但它是指定某個包下的級別。這裡我們指定了com.wlb下的所有都為debug級別,這樣再去看控制檯就會發現,原來的debug級別日誌也輸出了。
1 # 日誌配置 2 logging: 3 path: #日誌路徑 4 file: spring-boot-logger-resource\log\springboot-demo.log #日誌名稱,這裡用相對路徑建立。可以不用path直接用file建立任何地方 5 level: 6 # 指定路徑配置log級別 7 com: 8 wlb: debug
2. springboot的配置檔案分環境
在專案中一定是分環境的,不像我們自己寫的小demo。一般分為本地環境、開發環境、測試環境、生產環境,這裡我們舉例兩種只模擬本地環境、測試環境。
1)首先在yml相同位置複製貼上出兩個,分別叫application-dev.yml 和 application-test.yml分別模擬本地環境和測試環境。如圖:
2)在 application-dev.yml中配置當前檔名為dev,代表本地環境
1 spring: 2 # 當前檔案 3 profiles: dev
在application-test.yml中配置當前檔名為test,代表測試環境
1 spring: 2 # 當前檔案 3 profiles: test
最後在application.yml中配置當前選定的配置檔名為dev,即代表當前專案使用dev檔案中的所有配置。當在測試環境時只需要將dev改成test即可。
1 spring: 2 profiles: 3 # 當前選定的配置檔案 4 active: dev
就是這麼簡單就配置成功了,那麼如何驗證我們配置檔案分環境是否生效呢,讓我們結合下一個例子建立自定義屬性一起使用。
3. springboot的自定義屬性配置
在實際專案中我們有一些類似於常量的值,但又不想寫入程式碼中,這樣不便於區分以及後期維護,那麼一般都會寫在專門的配置檔案中,便於後期修改維護。比如mysql配置使用者名稱密碼、靜態資源路徑、以及一些業務需求的配置,他們跟程式碼的關係不大,所以一般不和開發程式碼放在一起。接下來教你怎麼在springboot中寫自定義屬性的配置。
1)首先建立entity包,在entity包下建立一個實體類ResourceEntity做自定義屬性配置。這個類要用@Component註解被spring管理起來,在需要自定義的屬性上加上@Value註解,這裡我們用com.resource + 屬性名做唯一區分。定義了資源url地址、資源埠、最大個數、最小個數四個屬性做測試。
1 @Component 2 public class ResourceEntity { 3 4 @Value("${com.resource.resourceUrl}") 5 private String resourceUrl; 6 7 @Value("${com.resource.resourcePort}") 8 private String resourcePort; 9 10 @Value("${com.resource.maxNum}") 11 private Integer maxNum; 12 13 @Value("${com.resource.minNum}") 14 private Integer minNum; 15 16 public String getResourceUrl() { 17 return resourceUrl; 18 } 19 20 public void setResourceUrl(String resourceUrl) { 21 this.resourceUrl = resourceUrl; 22 } 23 24 public String getResourcePort() { 25 return resourcePort; 26 } 27 28 public void setResourcePort(String resourcePort) { 29 this.resourcePort = resourcePort; 30 } 31 32 public Integer getMaxNum() { 33 return maxNum; 34 } 35 36 public void setMaxNum(Integer maxNum) { 37 this.maxNum = maxNum; 38 } 39 40 public Integer getMinNum() { 41 return minNum; 42 } 43 44 public void setMinNum(Integer minNum) { 45 this.minNum = minNum; 46 } 47 }
2)然後在application-dev.yml檔案中配置具體的自定義屬性值。這是本地環境配置檔案中的。
1 # 自定義配置 2 com: 3 resource: 4 resourceUrl: 192.168.0.1 5 resourcePort: 8888 6 maxNum: 100 7 minNum: 0
3)再在application-test.yml檔案中配置測試環境的屬性值。這是測試環境配置檔案中的。
1 # 自定義配置 2 com: 3 resource: 4 resourceUrl: 192.168.0.2 5 resourcePort: 8889 6 maxNum: 50 7 minNum: 1
4)建立ResourceController,用於頁面展示我們配置的屬性值。
1 @RestController 2 public class ResourceController { 3 4 @Autowired 5 private ResourceEntity resourceEntity; 6 7 @RequestMapping("/resource") 8 public ResourceEntity getResource() { 9 return resourceEntity; 10 } 11 }
5)啟動專案,在位址列輸入localhost:8080/resource並回車,這時看到頁面列印的json資料,正是我們在本地環境配置的屬性值。證實了自定義屬性的使用!
6)在application.yml檔案中修改dev為test(將本地環境配置切換為了測試環境配置)接著啟動專案,在位址列輸入localhost:8080/resource並回車,這時看到頁面列印的json資料,是我們在測試環境配置的屬性值。證實了配置檔案分環境的使用!
就是這麼簡單,一個springboot 日誌及自定義屬性專案完成!最後附上github地址,下載原始碼。