spring-boot版本問題讓開發懷疑人生

擁抱心中的夢想發表於2019-03-03

一、問題產生

當我們將一個框架從舊版本升級到新版本之後,各種相容各種坑可能會接踵而至,這通常是你意向不到的,因為新版本可能移除了舊版本的某些配置項,也可能更改了舊版本的配置項等。

這不,今天小編就遇到了這麼一個坑,這個坑是由於我把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的必經之路,大家一起加油吧!

相關文章