開發過程當中我可能常常會由於修改一點點代碼就須要重啓項目而煩惱,這樣不只很繁瑣,還會由於不斷重啓浪費大量的時間,沒法提升工做效率。但是如今SpringBoot爲咱們提供了很是簡單的方式讓咱們實現熱部署。java
1、添加相關依賴git
<!-- 熱部署依賴 start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <!-- <optional>true</optional> --><!-- 該屬性網上不少文章說必須爲true,經驗證能夠不用 --> <scope>true</scope> </dependency> <!-- 熱部署依賴 end -->
2、新增一個文件spring
import java.util.List; import com.somta.springboot.pojo.User; public interface UserDao { int addUser(User user); int deleteUserById(Long id); int updateUserById(User user); User queryUserById(Long id); List<User> queryUserList(); }
啓動項目,任意修改一段代碼,保存代碼,會發現系統自動重啓了,如此簡單就能夠達到熱部署了。springboot
3、靜態資源實現熱部署maven
後臺java代碼經過上面的配置已經輕鬆實現了熱部署,下面咱們說說SpringBoot的靜態資源的熱部署,默認狀況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些文件夾下的文件修改不會使應用重啓的。spring-boot
在yml文件中添加以下配置,分別指定須要重啓的文件夾和不須要重啓的文件夾(測試發現除了排除的文件夾,其餘文件夾修改都會觸發重啓,spring.devtools.restart.enabled=true 該屬性能夠快速啓用和禁止熱部署)測試
spring: devtools: restart: enabled: true #添加那個目錄的文件須要restart additional-paths: src/main/java #排除那個目錄的文件不須要restart exclude: static/**
4、熱部署原理分析spa
1)SpringBoot內置了兩個加載器,一個Base ClassLoader加載器,用於加載不會改變的第三方依賴的jar;另外一個Restart ClassLoader加載器,用於加載本身編寫的類;rest
2)執行流程:當應用重啓後,原先的Restart ClassLoader被丟掉、從新new一個Restart ClassLoader來加載這些修改過的東西,而Base ClassLoader卻沒有變化。這就是devtools重啓速度快的緣由。code
Git代碼地址:https://gitee.com/Somta/Sprin...
原文地址:http://somta.com.cn/blog/view...
本文由明天的地平線創做,如想了解更多更詳細的內容,請關注一下公衆號,公衆號內將進行最新最實時的更新!