這一章主要說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地址,下載源碼。