spring?boot教程之IDEA環(huán)境下的熱加載與熱部署
在實際的開發(fā)過程中,我們經(jīng)常修改代碼之后,手動的重啟項目,手動刷新瀏覽器查看修改效果。那么有沒有一種方式能夠快速的、自動的幫我們將修改代碼自動更新,避免手動重啟,從而提高開發(fā)效率呢?肯定是有的,但是對于這個功能很多人對功能的叫法有爭議,筆者查詢了維基百科、官方文檔,沒有得到合理的答案,也沒有權(quán)威的定義,筆者知道的就有:熱啟動、熱加載、熱更新、熱部署、熱切換。這幾個詞從語義上是有區(qū)別的,但是叫什么并不重要,實現(xiàn)了最重要,畢竟絕大部分程序員為了使用這個功能方便開發(fā),也不是專業(yè)的搞學(xué)術(shù)研究的。
如果哪位朋友獲得了權(quán)威渠道的說法,可以將文檔連接反饋給我。我再理解一下,爭取做到學(xué)術(shù)研究級別的一絲不茍!在此之前筆者按照自己的想法和英文翻譯的角度去使用這些名詞。
一、使用Jrebel插件
這是最簡單的一種方式,但是有一定的個局限性,Jrebel插件是收費的。雖然有破解方案,但是不建議!有需要的同學(xué)自行研究,這里就不多做介紹了。
Jrebel插件在有些Spring Boot版本不夠兼容,會報錯,越新的版本越容易報錯。所以筆者目前還是選擇性放棄使用該方法!
第一步:安裝插件,按照箭頭所示選擇安裝。安裝完成之后,要重啟IDEA才能生效。
第二步:激活。在安裝完成之后,右上角會多出這樣幾個按鈕。點擊之后會提示你進行插件激活,可以注冊碼激活,也可以在線激活。也可以填寫個人姓名、郵箱、電話之后獲取10天的試用!
第三步:更新操作觸發(fā)配置,這個配置不僅結(jié)合Jrebel使用有效,對于其他的方式實現(xiàn)開發(fā)過程中需要自動更新的情況下,也要勾選上。
在Spring Boot項目啟動配置中,選擇下圖中的紅色框中的內(nèi)容:uodate classes and resources on ‘update’ action
配置完成后,通過右上角的JR按鈕啟動SpringBoot項目。就可以實現(xiàn)改動代碼和資源的自動更新。
二、 devtools實現(xiàn)熱加載
這是一種對于SpringBoot而言比較常見的一種實現(xiàn)方式。
1.1.引入devtools的maven依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
spring-boot-devtools從名稱就可以看出來,是開發(fā)者工具包,其主要的功能就是實現(xiàn)熱加載。
其實現(xiàn)原理就是兩個ClassLoader,一個負(fù)責(zé)加載那些不會經(jīng)常改變的文件,比如:第三方j(luò)ar包,一旦引入項目之后這部分代碼在調(diào)試過程中就處于不變的狀態(tài);一個負(fù)責(zé)加載可能經(jīng)常改變的類,比如我們自己在項目中寫的代碼,被稱為restart ClassLoader。當(dāng)有代碼發(fā)生改變的時候,重建一個restart ClassLoader,原有的restart ClassLoader被丟掉。由于每次重新加載的內(nèi)容較少,所以速度比手動重啟更快一些。
1.2.設(shè)置IDEA
首先,運行時編譯配置:組合鍵:“Shift+Ctrl+Alt+/” ,選擇 “Registry” ,選中打勾 “compiler.automake.allow.when.app.running” 。
其次,自動化編譯配置: “File” -> “Settings” -> “Build,Execution,Deplyment” -> “Compiler”,選中打勾 “Make project automatically” 。這是一種重新自動化的編譯整體項目的方法。但是筆者一般不這么做,因為IDEA的文件是自動保存的,你想修改一個字符串,有可能你只修改完成第一個字符它就重新編譯了,重新加載啟動。所以,筆者一般代碼修改完成之后,使用Ctrl + F9快捷鍵對修改類重新編譯,而不是做項目的自動化編譯。
最后,在一些相對舊的IDEA版本上運行時配置,按如下圖形勾選。(新版本IDEA已經(jīng)不需要了)
1.3 修改一下application.properties配置
在比較新的Spring Boot devtools版本中我們已經(jīng)不需要做如下的配置了,但是如果你以上的步驟都完成了,仍然無法實現(xiàn)代碼更改之后的熱加載,請參考下面的方法。在有些版本我們需要配置熱加載生效的開關(guān),使其值等于true。
下文是properties格式配置,喜歡yml格式的同學(xué)可以自行調(diào)整一下。默認(rèn)情況下,支持熱加載的目錄如下,如果需要其它目錄下文件支持熱加載需要手動配置:
/META-INF/maven /META-INF/resources /resources /static /public /templates
#熱加載生效 spring.devtools.restart.enabled=true #額外新增的熱加載目錄 spring.devtools.restart.additional-paths= src/main/java #熱加載排除目錄 #spring.devtools.restart.exclude=
1.4.LiveReload插件
最后建議你去chrome 瀏覽器插件商店安裝一個插件叫做LiveReload。
Spring devtools默認(rèn)會啟動一個 Live Reload Server實例,監(jiān)聽文件的變化。并實時的與瀏覽器插件通信,更新瀏覽器展示界面。這樣,你就不用每次更改內(nèi)容之后都點擊瀏覽器刷新按鈕了。
1.5.最后測試一下
改一下代碼,看看會不會生效。通常不生效的原因有兩種:
- JDK編譯版本和運行版本不統(tǒng)一,自行學(xué)習(xí)一下IDEA環(huán)境下JDK配置
- 瀏覽器緩存或者其他的緩存軟件導(dǎo)致的問題
到此這篇關(guān)于spring boot教程之IDEA環(huán)境下的熱加載與熱部署的文章就介紹到這了,更多相關(guān)spring boot 熱加載與熱部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis配置mapper-locations位置的三種方式小結(jié)
這篇文章主要給大家介紹了關(guān)于mybatis配置mapper-locations位置的三種方式,Mybatis-Plus的初衷是為了簡化開發(fā),而不建議開發(fā)者自己寫SQL語句的,但是有時客戶需求比較復(fù)雜,需要的朋友可以參考下2023-08-08Java中CountDownLatch工具類詳細(xì)解析
這篇文章主要介紹了Java中CountDownLatch工具類詳細(xì)解析,創(chuàng)建CountDownLatch對象時,會傳入一個count數(shù)值,該對象每次調(diào)用countDown()方法會使count?--?,就是count每次減1,需要的朋友可以參考下2023-11-11SpringBoot Shiro 權(quán)限注解不起作用的解決方法
本文主要介紹了SpringBoot Shiro 權(quán)限注解不起作用的解決方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07Spring實現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了一種Spring實現(xiàn)動態(tài)數(shù)據(jù)源切換的方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量的問題分析
在Java編碼中,我們通常會把這些數(shù)字或者字符串定義在常量類或者接口中,可以直接在mapper中也可以使用這些常量就比較好,這篇文章主要介紹了MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量,需要的朋友可以參考下2023-06-06Java并發(fā)編程回環(huán)屏障CyclicBarrier
這篇文章主要介紹了Java并發(fā)編程回環(huán)屏障CyclicBarrier,文章繼續(xù)上文所介紹的Java并發(fā)編程同步器CountDownLatch展開主題相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-04-04