一、問題產生
當我們將一個框架從舊版本升級到新版本之後,各種相容各種坑可能會接踵而至,這通常是你意向不到的,因為新版本可能移除了舊版本的某些配置項,也可能更改了舊版本的配置項等。
這不,今天小編就遇到了這麼一個坑,這個坑是由於我把spring-boot
版本升級之後更改帶來的,這讓我一度懷疑是我某個地方配置錯了什麼的。下面我們一起看看這個坑是什麼?
當我們在開發spring-boot
應用程式時,往往需要對系統的某些屬性進行配置,比如說你像讓這個系統在7000
埠啟動,那麼你只需在appication.properties
檔案中增加下面的配置項即可:
server.port=7000
又或者你想限制上傳檔案的大小時,你可以進行以下配置:
spring.http.multipart.max-file-size=10M
問題來了,小編將spring版本從1.5.7升級到2.0.0時發現server.context-path
配置項不生效,下面貼出小編的配置:
application.properties
server.port=7001
server.context-path=/hello
複製程式碼
JsonBackController.java
package com.example.jsonpDemo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.jsonpDemo.pojo.User;
/**
*
* The class JsonBackController.
*
* Description:該控制器返回一串簡單的json資料,json資料由一個簡單的User物件組成
*
* @author: huangjiawei
* @since: 2018年6月12日
* @version: $Revision$ $Date$ $LastChangedBy$
*
*/
@RestController
@RequestMapping(value = "/map")
public class JsonBackController {
@RequestMapping(value = "getUser.json")
public User getUser() {
return new User("huangjiawei", 22);
}
}
複製程式碼
上面的配置正常來說啟動應用程式之後,你在瀏覽器輸入http:localhost:7001/hello/map/getUser.json
後應該可以執行到getUser()
方法,但在spring-boot 2.0.0
版本卻報出404錯誤,由於小編同時將該應用程式部署到阿里雲伺服器並採用nginx做相應的轉發,這一度讓我懷疑是不是我在nginx上配置出錯了,結果採用nginx -t
之後發現沒語法錯誤,其他應用也可以正常訪問。
後來懷疑這懷疑那,差點沒懷疑到人生,最後發現是版本問題導致的,2.0.0版本之前server.context-path
配置是有效的,但在2.0.0後改為server.servlet.context-path
,為了貼出相關證據,我搜了spring-boot的遠在github上的老家,下面貼出它家的寶貝:github.com/spring-proj…
總結
這次花了我些時間在排查上,我想這也是由於我經驗不足導致的,所以,小編認為,以後如果遇到相關開發問題時,應該學會去抄框架的家底,畢竟寶貝都在那!看看新版本都有哪些更新,再考慮換個版本看看。但如果你的應用程式已經在生產上執行,版本切換要考慮影響程度,不要影響其他業務功能。
spring-boot
內容還是挺多的,這個框架也是當前後端微服務比較火的,也是通往spring-cloud
的必經之路,大家一起加油吧!