您好,登錄后才能下訂單哦!
本篇內容介紹了“熱交換Hot Swapping是怎么工作的”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Spring Boot有很多用于熱加載的選項,不過推薦使用spring-boot-devtools,因為它提供了其他開發時特性,比如快速應用重啟和LiveReload,還有開發時敏感的配置加載(比如,模板緩存)。
此外,使用IDE開發也是一個不錯的方式,特別是需要調試的時候(所有的現代IDEs都允許重新加載靜態資源,通常也支持對變更的Java類進行熱交換)。
最后,Maven和Gradle插件也支持命令行下的靜態文件熱加載。如果你使用其他高級工具編寫css/js,并使用外部的css/js編譯器,那你就可以充分利用該功能。
Spring Boot支持的大多數模板技術包含一個禁用緩存的配置選項,如果你正在使用spring-boot-devtools模塊,Spring Boot在開發期間會自動為你配置那些屬性。
如果你正在使用Thymeleaf,那就將spring.thymeleaf.cache設置為false,查看ThymeleafAutoConfiguration可以獲取其他Thymeleaf自定義選項。
如果你正在使用FreeMarker,那就將spring.freemarker.cache設置為false,查看FreeMarkerAutoConfiguration 可以獲取其他FreeMarker自定義選項。
如果你正在使用Groovy模板,那就將spring.groovy.template.cache設置為false,查看GroovyTemplateAutoConfiguration可以獲取其他Groovy自定義選項。
如果你正在使用Velocity,那就將spring.velocity.cache設置為false,查看VelocityAutoConfiguration可以獲取其他Velocity自定義選項。
spring-boot-devtools模塊包括應用自動重啟支持,雖然沒有其他技術快,比如JRebel或Spring Loaded,但比"冷啟動"快。在研究其他復雜重啟選項時,你最好自己先試下,更多詳情可參考Spring Boot的使用:開發者工具章節。
現代IDEs(Eclipse, IDEA等)都支持字節碼的熱交換,所以如果你做了一個沒有影響類或方法簽名的改變,它會利索地重新加載并沒有任何影響。
Spring Loaded在這方面走的更遠,它能夠重新加載方法簽名改變的類定義,如果對它進行一些自定義配置可以強制ApplicationContext刷新自己(但沒有通用的機制來確保這對一個運行中的應用總是安全的,所以它可能只是一個開發時的技巧)。
為了在Maven命令行下使用Spring Loaded,你只需將它作為依賴添加到Spring Boot插件聲明中即可,比如:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.0.RELEASE</version> </dependency> </dependencies> </plugin>
正常情況下,這在Eclipse和IntelliJ IDEA中工作的相當漂亮,只要它們有相應的,和Maven默認一致的構建配置(Eclipse m2e對此支持的更好,開箱即用)。
如果想將Spring Loaded和Gradle,IntelliJ IDEA結合起來,那你需要付出代價。默認情況下,IntelliJ IDEA將類編譯到一個跟Gradle不同的位置,這會導致Spring Loaded監控失敗。
為了正確配置IntelliJ IDEA,你可以使用idea Gradle插件:
buildscript { repositories { jcenter() } dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:1.4.1.RELEASE" classpath 'org.springframework:springloaded:1.2.0.RELEASE' } } apply plugin: 'idea' idea { module { inheritOutputDirs = false outputDir = file("$buildDir/classes/main/") } } // ...
注 IntelliJ IDEA必須配置跟命令行Gradle任務相同的Java版本,并且springloaded必須作為一個buildscript依賴被包含進去。
此外,你也可以啟用Intellij IDEA內部的Make Project Automatically,這樣不管什么時候只要文件被保存都會自動編譯。
“熱交換Hot Swapping是怎么工作的”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。