以下都是錯誤的,……不能說全錯,不過當時沒有注意一個問題,今天看springcloud的教學,結果有講dev-tools的使用,用了2天了,都是成功的。視頻地址:尚硅谷springcloud教學:熱部署Devtools
博客先不修改,最近沒啥時間,我也想知道我之前作為一個菜逼的時候是怎么想的(雖然現在還是菜逼),忽略了一個問題導致啟用失效。
1.spring-boot-devtools在官方文檔是叫做Hot Swapping,它的主要作用是快速重啟。
2.我個人認為這個spring-boot-devtools在IDEA上使用是有坑的,至於是IDEA的問題還是說這個依賴有問題就不清楚了。
3.我從今天早上4點半開始研究這個spring-boot-devtools到底怎么用,直到現在我明確的表示拒絕使用了。除非我找到什么解決方法。
開始正文:我會詳細講講在這上面遇到的坑
我的環境:
IDEA2018.3.5.x64 破解版(jar包破解)
Spring-Boot 2.2.6.RELEASE
很多人使用spring-boot-devtools應該是朝着能夠動態編譯修改后的代碼去的,使得開發更加方便。
下面講述下使用:
1.請不要再找什么博客之類的去學習操作了,他們說來說去無非就是4步,添加devtools依賴,<plugin>中配置<configuration><fork>true</fork></configuration>,IDEA的setting設置自動編譯,然后快捷鍵打開IDEA的Registry對compiler.automake.allow.when.app.running✔。
我不得不吐槽下,我找了20+篇博客,其中一半多是一個字都沒變的,你們到底是同一個人寫的呢?還是轉發或者復制?說明都不給一個?而且其中一半連<optional>和<scope>到底有什么用都搞不清,就來一句“必須要加上這個”,我真的……雖然我很菜……但是……
其中將近三分之一的博客是寫對了的,但是它對了不代表自己照着操作就能保證自己是正確的。其中只有3篇博客是給我了一點幫助的,其他的……。
2.我個人推薦你使用IDEA的聯網模板方式。
請按着上面的方式來操作,第二幅圖請選擇Maven Project,而不要選擇Maven POM,第三幅圖可以選擇加上選中web選項。
我為什么推薦聯網的官方模板?因為這個真的是有坑,請看下一步。
3.開始創建一個@RestController,寫一個GetMapping,隨便return些什么String,其他文件不需要動,不要創建子模塊,更不要把測試devtools的代碼寫在子模塊中。也不需要任何的IDEA設置。
4.開始檢測你的spring-boot-devtools是否有坑:啟動Spring Boot的main方法,瀏覽器輸入地址,可以看見結果正確。開始修改return的返回值,請手動build或者重編譯這三個按鈕最好都試幾下,雖然是選擇其中一個就可以,但是我這邊出現過問題,點擊后請注意控制台(是控制台,devtools和target目錄沒關系,上面的任意一個按鈕都可以改變target目錄的文件,但是並沒有什么用,要控制台有重啟的表示才算可以)。因為devtools是重新啟動的,啟動了的話,控制台就會有輸出,就和自己選擇Spring Boot的main方法啟動后的控制台輸出一樣。如果有重新輸出,說明你的devtools可以正常使用,但如果這三個按鈕試來試去都沒反應,那么就說明devtools不可用,建議放棄,不要浪費時間了。(這個看運氣,我創建了10個項目,8個是maven改成Spring Boot,2個是聯網的官方模板),其中官方模板只有1個成功,2個maven改有時有反應。注意事項:不要點擊Rebuild Project,這個相當於重啟Spring Boot的main方法,和devtools完全沒關系。不要在修改pom文件后點擊這三個按鈕,pom的某些配置改變會導致按這三個按鈕有devtools看起來成功的類似效果。我說的測試devtools的測試類是寫在父模塊下的,意思就是叫你不要創建子模塊,子模塊中的devtools依賴完全不起作用(同時改變兩份文件,在父模塊devtools有效果的情況下,子模塊也完全無效)。
5.第4步如果你成功了,就繼續看。上面的三個按鈕是自己手動控制,現在介紹自動。我的環境不需要設置<fork>true</fork>,也就是說你現在只需要對IDEA進行設置(開頭講的4步操作的后2步),項目文件不需要動,如果不知道如何設置,請百度,網上一大堆。設置好后,可以選擇重啟也可以不重啟,最好重啟下IDEA或者干脆重啟電腦(萬無一失,滑稽),反正我沒重啟也成功了。
6.重復第4步的操作,等待7-30秒,最好選擇在瀏覽器上每隔10秒就按一次刷新。注意:請不要時常關注target目錄的編譯結果,即使你能夠正常自動重啟,但只要切換到target,自動重啟就會延后,甚至頻繁切換target會導致自動重啟暫時性的失效。
7.如果以上你都沒有問題,那么請自己琢磨子模塊中devtools怎么使用吧,至少我是不會的。趕緊折騰一整天的spring-boot-devtools啥都沒搞會,就只知道了這是重新啟動,而不是那些個博客中說的熱部署。
附上官方文檔:
自從看視頻后學會了devtools的使用,感覺自己是個沙雕,這么明顯的問題都沒有看出來,當時……
多模塊的項目盡量每一個模塊單獨一個devTools,不要放在父pom的<dependencies>標簽里面。