注意:默認使用Maven項目。
springloader方式:首先在pom.xml中添加依賴
<!-- 構建節點 --> <build> <plugins> <!-- 在這里添加springloader plugin--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <!-- springboaded hot deploy --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.4.RELEASE</version> </dependency> </dependencies> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build>
然后啟動,啟動有兩個方式:
方式1:右鍵 -> run as --> Maven build ,在Goals中輸入spring-boot:run ,然后run 即可熱啟動,此種方式有一個缺點那就是停止服務后端口仍占用,必須在任務管理器中關閉進程。
方式2:下載所需jar包(spring-loader-1.2.4.RELEASE.jar),添加到項目。 在項目右鍵 run as --> Run configurations --> Arguments 中,設置VM arguments: -javaagent:.\lib\springloaded-1.2.4.RELEASE.jar -noverify
然后啟動
springloader方式只對修改返回值有效,而對添加方法無效。
========================================================================
devtools方式:
首先添加依賴,
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency>
然后添加plugin
<!-- 熱部署2:spring boot devtool plugin --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- fork: 如果沒有該項配置,devtools不會起作用,即不會restart --> <fork>true</fork> </configuration> </plugin>
然后啟動即可。
原理是修改后服務會快速重啟,深層原理是使用了兩個classloader,一個classloader加載那些不會改變的類,另一個classloader加載會更改的類,成為restart Classloader。
這樣代碼有更改的時候,原來的restart Classloader被丟棄,重新創建一個restart Classloader,由於需要加載的類比較少,所以實現了較快的重啟時間(5s以內)。
對於添加方法仍有效。