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