有時候咱們開發完SpringBoot項目後,啓動運行。可是常常發現代碼須要反覆修改,而後修改部份內容後須要再啓動,這樣太費時了,熱部署就是用來解決這一問題。讓你修改完代碼後,能自動執行編譯並運行。java
深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另外一個ClassLoader加載會更改的類,稱爲restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,從新建立一個restart ClassLoader,因爲須要加載的類相比較少,因此實現了較快的重啓時間。
spring-boot-devtools 是一個爲開發者服務的一個模塊,其中最重要的功能就是熱部署。該模塊在完整的打包環境下運行的時候會被禁用。若是你使用 java -jar啓動應用或者用一個特定的 classloader 啓動,它會認爲這是一個「生產環境」。
spring
加入spring-boot-devtools
依賴和spring-boot-maven-plugin
插件springboot
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>
當咱們修改了Java類後,IDEA默認是不自動編譯的,而spring-boot-devtools又是監測classpath下的文件發生變化纔會重啓應用,因此須要設置IDEA的自動編譯。app
(1)依次點開菜單 【File】->【Settings】->【Build,Execution,Deployment】->【Compiler】: 勾選右側的【Build project automatically】maven
(2)按下Ctrl+Shift+A,打開搜索,輸入registry,並打開搜索到的該項設置ide
(3)找到compiler.automake.allow.when.app.running項,並打勾spring-boot
(4)重啓IDEA測試
在application.properties中配置spring.devtools.restart.enabled=false,此時restart類加載器還會初始化,但不會監視文件更新。在SprintApplication.run以前調用System.setProperty("spring.devtools.restart.enabled", "false");
能夠徹底關閉重啓支持。ui
#熱部署生效 spring.devtools.restart.enabled: true #設置重啓的目錄 spring.devtools.restart.additional-paths: src/main/java #classpath目錄下的WEB-INF文件夾內容修改不重啓 spring.devtools.restart.exclude: WEB-INF/**
注:關於devtools能夠自定義不少屬性,達到自定義效果。idea