開發過程中我可能經常會因為修改一點點代碼就需要重啟項目而煩惱,這樣不僅很繁瑣,還會因為不斷重啟浪費大量的時間,無法提高工作效率。可是現在SpringBoot為我們提供了非常簡單的方式讓我們實現熱部署。
一、添加相關依賴
<!-- 熱部署依賴 start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- <optional>true</optional> --><!-- 該屬性網上很多文章說必須為true,經驗證可以不用 -->
<scope>true</scope>
</dependency>
<!-- 熱部署依賴 end -->
二、新增一個文件
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();
}
啟動項目,任意修改一段代碼,保存代碼,會發現系統自動重啟了,如此簡單就可以達到熱部署了。
三、靜態資源實現熱部署
后台java代碼通過上面的配置已經輕松實現了熱部署,下面我們說說SpringBoot的靜態資源的熱部署,默認情況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些文件夾下的文件修改不會使應用重啟的。
在yml文件中添加如下配置,分別指定需要重啟的文件夾和不需要重啟的文件夾(測試發現除了排除的文件夾,其他文件夾修改都會觸發重啟,spring.devtools.restart.enabled=true 該屬性可以快速啟用和禁止熱部署)
spring:
devtools:
restart:
enabled: true
#添加那個目錄的文件需要restart
additional-paths: src/main/java
#排除那個目錄的文件不需要restart
exclude: static/**
四、熱部署原理分析
1)SpringBoot內置了兩個加載器,一個Base ClassLoader加載器,用於加載不會改變的第三方依賴的jar;另一個Restart ClassLoader加載器,用於加載自己編寫的類;
2)執行流程:當應用重啟后,原先的Restart ClassLoader被丟掉、重新new一個Restart ClassLoader來加載這些修改過的東西,而Base ClassLoader卻沒有變化。這就是devtools重啟速度快的原因。
Git代碼地址:https://gitee.com/Somta/SpringBoot/tree/master/SpringBoot-hotDeploy
原文地址:http://somta.com.cn/#/blog/view/5da584874c534964866aa099e41f3b43
---------------------
作者:明天的地平線
來源:CSDN
原文:https://blog.csdn.net/husong_/article/details/79984248
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!