spring boot 2.0.6 升級(采坑)感想

spring boot 2.0.6 升級(采坑)感想

1残腌、為什么要升級

因為我就是喜歡用最新的版本蟆盹。
開個玩笑逾滥,
當你每天面對的核心代碼依賴版本是幾年前的時候;
當你想用的某個新的特性因為版本問題無法使用的時候舔哪;
當jdk都已經(jīng)升級到了11而你的spring版本只支持到8捉蚤;
當你每天看到的博客里面都說spring5各種特性的時候缆巧;
所謂兵欲善其事,必先利其器墩莫,你是否在這一刻心動了狂秦,是時候改變了裂问,時代在進步堪簿,而我不想太落后哪审。
也許有人說現(xiàn)在的版本很穩(wěn)定湿滓,你升級了版本后除了問題怎么辦叽奥?(一片烏鴉飛過天際....我不想回答這個問題)
那么接下來進入正題,升級的血淚史來了赵哲。。筷屡。毙死。。再菊。。為自己默哀28秒

2稠诲、升級概要

步驟:

1. 從官網(wǎng)找到最新版本:2.0.6.RELEASE
2. 找到官方Demo(https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples)ps:原來支持這么多東西略水,不怕不怕
3. 簡單粗暴渊涝,不要慫,直接把項目里面的各種依賴升級到最新版本。ps:當然嘱蛋,請不要影響進展的業(yè)務(wù),拉個新的分支出來
4. 運行項目凶伙,啪啪啪報錯函荣。。扳肛。

本次升級涉及到的版本變更如下:

1. spring boot 1.4.3.RELEASE 咚咚 2.0.6.RELEASE
2. druid-spring-boot-starter 1.1.6 咚咚 1.1.10
3. fastjson 1.2.44 咚咚 1.2.51
4. lombok 1.16.10 咚咚 1.18.2
3傻挂、坑坑坑
雷區(qū)1

數(shù)據(jù)庫連不上了⊥谙ⅲ快到斬亂麻金拒,直接改配置套腹。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306?useSSL=false&allowMultiQueries=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
    username: username
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
雷區(qū)2

老版本

spring:
  profiles:
    #active: ${SERVER_ENVIROMENT}
    active: ${SERVER_ENVIROMENT:dev}
  mvc:
    throw-exception-if-no-handler-found: true
  resources:
    add-mappings: false
  http:
    multipart:
      max-file-size: 10MB
      max-request-size: 15MB

新版本

spring:
  profiles:
    #active: ${SERVER_ENVIROMENT}
    active: ${SERVER_ENVIROMENT:dev}
  mvc:
    throw-exception-if-no-handler-found: true
  resources:
    add-mappings: false
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 15MB
雷區(qū)3

當服務(wù)不需要加載數(shù)據(jù)源的時候绪抛。

老版本

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

新版本:

@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class,DataSourceAutoConfiguration.class})
public class MyApplication {


    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

原因:我再研究研究,時間緊迫电禀,大家也可以自行去搜索搜索幢码。和新版本默認使用HikariCP作為數(shù)據(jù)庫連接池有關(guān)。

雷區(qū)4

直接上代碼吧
老版本:

@Configuration
public class MyWebConfig extends WebMvcConfigurerAdapter {}

新版本:

@Configuration
public class MyWebConfig implements WebMvcConfigurer {}

就是這么不一樣

雷區(qū)5

由于雷區(qū)4當時沒有發(fā)現(xiàn)導(dǎo)致我的代碼自動化腳本一片飄紅鞭呕,原因是HttpMessageConverterSpring默認會使用MappingJackson2HttpMessageConverter蛤育,因為雷區(qū)4里面的老版本配置不生效宛官,項目里面以前都統(tǒng)一用的FastJsonHttpMessageConverter作為Json轉(zhuǎn)換器

雷區(qū)6(零零散散花費了我大概一天時間)

原因

* 由于項目中的自研SOA框架底層RPC的時候用的是RestTemplate。
* 我并沒有自定義RestTemplate的HttpMessageConverter
* 所以RestTemplate的http請求響應(yīng)解析用的是MappingJackson2HttpMessageConverter

結(jié)果

* 導(dǎo)致響應(yīng)實體沒有添加無參構(gòu)造的時候報錯

解決過程:

  1. 自定義RestTemplateHttpMessageConverter瓦糕,去掉MappingJackson2HttpMessageConverter底洗,加上FastJsonHttpMessageConverter
  2. 心想咕娄,這下沒問題了吧亥揖,好,啟動項目圣勒,what a fuck,啟動不起來了费变。
  3. 就這個問題找了好幾個小時,各種換HttpMessageConverter順序圣贸,各種debug挚歧,就是解決不了啊,還有別的事情吁峻,哎滑负,今天果斷放棄。
  4. 第二天空一點點了用含,接著調(diào)矮慕。。啄骇。過程就不贅述了痴鳄,也怪眼神不好,沒看到以下坑B的報錯:


    WechatIMG2772.jpeg
解決方案

至此缸夹,問題也定位到了痪寻,fastjson版本升級問題:Content-type變成了Content-type:*/*
。驚不驚喜明未,刺不刺激槽华,上改動后的代碼吧。

@Bean
    public RestTemplate getRestTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
        converters.removeIf(c -> c instanceof MappingJackson2HttpMessageConverter);
        converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8));
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        List<MediaType> supportedMediaTypes = new ArrayList<>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
        supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
        supportedMediaTypes.add(MediaType.APPLICATION_PDF);
        supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
        supportedMediaTypes.add(MediaType.APPLICATION_XML);
        supportedMediaTypes.add(MediaType.IMAGE_GIF);
        supportedMediaTypes.add(MediaType.IMAGE_JPEG);
        supportedMediaTypes.add(MediaType.IMAGE_PNG);
        supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
        supportedMediaTypes.add(MediaType.TEXT_HTML);
        supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
        supportedMediaTypes.add(MediaType.TEXT_PLAIN);
        supportedMediaTypes.add(MediaType.TEXT_XML);
        fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes);
        converters.add(fastJsonHttpMessageConverter);
        restTemplate.setMessageConverters(converters);
        return restTemplate;
    }

好了趟妥,現(xiàn)在請求和響應(yīng)實體不寫默認構(gòu)造參數(shù)也可以啦猫态。

結(jié)束語

分別總是在九月,回憶是思念的愁披摄。
感想也該結(jié)束了亲雪。
我們會持續(xù)學(xué)習(xí),爭取早日用上Spring5的新特性疚膊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末义辕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寓盗,更是在濱河造成了極大的恐慌灌砖,老刑警劉巖璧函,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異基显,居然都是意外死亡蘸吓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門撩幽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來库继,“玉大人,你說我怎么就攤上這事窜醉∠芴眩” “怎么了榨惰?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長聊记。 經(jīng)常有香客問我,道長恢暖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任狰右,我火速辦了婚禮,結(jié)果婚禮上嫁佳,老公的妹妹穿的比我還像新娘。我一直安慰自己谷暮,他們只是感情好蒿往,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湿弦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颊埃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天饥漫,我揣著相機與錄音罗标,去河邊找鬼积蜻。 笑死,一個胖子當著我的面吹牛竿拆,可吹牛的內(nèi)容都是我干的证膨。 我是一名探鬼主播如输,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼不见,長吁一口氣:“原來是場噩夢啊……” “哼崔步!你這毒婦竟也來了稳吮?” 一聲冷哼從身側(cè)響起井濒,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酪惭,沒想到半個月后者甲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡虏缸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刽辙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡颂翼,死狀恐怖撵溃,靈堂內(nèi)的尸體忽然破棺而出疚鲤,到底是詐尸還是另有隱情缘挑,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布诲宇,位于F島的核電站,受9級特大地震影響姑蓝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纺荧,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一宙暇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧占贫,春花似錦、人聲如沸型奥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烫葬。三九已至,卻和暖如春厘灼,著一層夾襖步出監(jiān)牢的瞬間咽瓷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工茅姜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奋姿。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓素标,卻偏偏與公主長得像,于是被迫代替她去往敵國和親头遭。 傳聞我的和親對象是個殘疾皇子癣诱,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容