前言
因為之前使用myeclipes的同學就知道,在使用myeclipes的時候,java文件或者jsp文件寫完之后會被直接熱加載到部署的容器中,從而在開發的時候,不同經常去重啟項目,從而達到了增加開發效率的目的。
但是現在切換到SpringBoot之后,因為沒有外部容器的支持,而且使用gradle去構建項目,再加上idea默認不會自動編譯的特性,最終導致開發項目的時候需要經常重啟項目,這是我們不願意看到的。
為了提高開發效率,我們下面將優化我們的SpringBoot模版。方案經過驗證,可放心使用。
github地址:https://github.com/LinkinStars/springBootTemplate
方案說明
1、SpringBoot對於頁面來說,已經實現了熱加載,只是默認是關閉的,需要手動打開。
2、對於JAVA類來說,使用官方推薦的spring-boot-devtools
來實現熱部署(這里是熱部署並非熱加載注意區別)
3、需要關閉頁面的緩存,這里我使用的是Thymeleaf配置在后面說明。
詳細的方案說明可以參考spring官方文檔:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-hotswapping.html
spring考慮是真的周到,我一開始都沒發現文檔中還有熱部署相關的說明。
如何配置實現
1、在build.gradle文件根節點中加入
bootRun {
//開啟頁面熱加載功能
addResources = true
}
2、在build.gradle文件dependencies下加入compile("org.springframework.boot:spring-boot-devtools")
3、開啟IDEA自動編譯
上面的打勾之后,按下面的鍵
windows:ctrl + alt + shift + /
mac: command + alt + shift + /
點擊Registry,勾選compiler.automake.allow.when.app.running
4、配置thymeleaf.cache為false
thymeleaf:
cache : false
性能等情況說明
1、經過以上的配置之后,頁面的修改不需要進行編譯,修改馬上就會有效果
2、Java類在修改之后會被重新編譯,但是要注意的是,項目會重新進行部署,你可以從控制台看到信息。
3、但是經過測試,並不是整個項目重新進行部署,spring應該已經做過處理,所以重新部署的時間非常快,不會影響使用。
4、還有一種實現方案是使用:springloaded 據說是實現的熱加載而非熱部署,但是我經過實踐之后發現在我的環境下並不能成功,沒有效果,spring官方文檔中還特別對SpringBoot+gradle+idea這樣的環境使用springloaded做出了說明,但是我根據文檔配置之后任然是不行,可能跟我本地環境有關,不過以上的配置可以滿足我的需求,而且部署時間並不長,所以我選擇使用了devtools
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-hotswapping.html
5、令人開心還有,因為實現的是熱部署,所以即使是XML文件的修改,比如MyBatis的SQL修改都會被熱部署,也就是改什么就馬上有用了。
6、因為當前還是一個最簡單的項目之下,沒有很多包很多類,我不清楚當項目大了之后部署時間會不會變的特別長,還需進行測試。我的建議是,如果你有很多東西要一次性改,你就老老實實停了項目改就好了。反正不差這點時間。