使用spring-boot-devtools熱部署
阿新 • • 發佈:2020-11-22
環境:windows 10 + IDEA
新建一個Maven專案
pom.xml中加入spring-boot-devtools依賴
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency>
注意,還需要加入spring-boot-maven-plugin
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--如果沒有該配置,devtools不會起作用,即應用不會restart--> <fork>true</fork> </configuration> </plugin></plugins> </build>
建立啟動類和控制器類、頁面
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringBootDemoApplication.class, args); } }
package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("hello") public class HelloController { @RequestMapping("index") public String index(Model model){ model.addAttribute("who","spring boot"); return "hello/index.html"; } }
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <title>spring boot demo</title> </head> <body> <p th:text="${who}"></p> </body> </html>
頁面熱部署需要在application.yml中配置
spring:
thymeleaf:
cache: false
程式碼修改後不能熱部署
原因:
Spring Boot Devtools會監控類路徑目錄,如果類路徑下的檔案發生了變化(比如重新編譯),則Spring Boot Devtools會重新載入和重啟Spring Boot應用。
而在Intellij中,預設不會自動編譯(auto build),並且預設不會更新正在執行的應用。
這就導致了在Intellj中修改程式碼後,Spring Boot應用不會重新載入新的類檔案。
方法:
手動觸發構建,修改程式碼後,選擇 Build / Build project (Win/Linux:CTRL
+F9
, Mac:COMMAND
+F9
)