Spring Boot 第26篇: Springboot整合devtools實現熱部署
阿新 • • 發佈:2019-02-15
構架工程
建立一個springboot工程,在其pom檔案加入:
<!-- 熱部署 -->
<!-- devtools可以實現頁面熱部署(即頁面修改後會立即生效,
這個可以直接在application.properties檔案中配置spring.thymeleaf.cache=false來實現) -->
<!-- 實現類檔案熱部署(類檔案修改後不會立即生效),實現對屬性檔案的熱部署。 -->
<!-- 即devtools會監聽classpath下的檔案變動,並且會立即重啟應用(發生在儲存時機),
注意:因為其採用的虛擬機器機制,該項重啟是很快的 -->
<!-- (1)base classloader (Base類載入器):載入不改變的Class,例如:第三方提供的jar包。 -->
<!-- (2)restart classloader(Restart類載入器):載入正在開發的Class。 -->
<!-- 為什麼重啟很快,因為重啟的時候只是載入了在開發的Class,沒有重新載入第三方的jar包。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId> spring-boot-devtools</artifactId>
<!-- optional=true, 依賴不會傳遞, 該專案依賴devtools;
之後依賴boot專案的專案如果想要使用devtools, 需要重新引入 -->
<optional>true</optional>
</dependency>
新增配置
在application.properties配置檔案中加入:
#設定熱部署生效
spring.devtools.restart.enabled=true
#設定重啟的目錄,新增那個目錄的檔案需要restart
spring.devtools.restart.additional-paths=src/main/java
#排除那個目錄的檔案不需要restart
#spring.devtools.restart.exclude=static/**,public/**
#classpath的目錄下的WEB-INF資料夾內容修改不重啟
#spring.devtools.restart.exclude=WEB-INF/**
測試程式碼
建立使用者實體:
package com.iisrun.pojo;
import java.util.Date;
public class User {
private String name;
private String password;
private Integer age;
private Date birthday;
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
建立使用者controller:
package com.iisrun.controller;
import java.util.Date;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.iisrun.pojo.IMoocJSONResult;
import com.iisrun.pojo.User;
@RestController
@RequestMapping("/user")
public class UserContoller {
@RequestMapping("/getUser")
public User getUser() {
User u = new User();
u.setName("張三");
u.setAge(18);
u.setBirthday(new Date());
u.setPassword("123456");
u.setDesc("hello 張三~~");
return u;
}
}
測試熱部署是否生效
方法一:
專案啟動狀態,手動修改User物件的值,儲存後重新整理瀏覽器查詢熱部署是否生效。
方法二:
專案啟動狀態,手動修改User物件的值,儲存後檢視控制檯是否有restartedMain字樣的輸出。
以上程式碼均已測試通過。