使用Spring Boot開發WEB項目時, 如果使用了Freemarker/jsp等模版文件, 那么我們需要:
- Java代碼動態打斷點
- 實時動態刷新模版文件的修改, 不用每次重啟
1. 使用Maven插件: spring-boot:run
spring-boot:run -Dspring-boot.run.fork=false
fork參數設置為false, 這樣在Java中才能打斷點.
原理: 如果fork了新進程, 則ide自動設置的遠程調試端口綁定到了父進程, 則無法和新進程綁定, 所以就無法打斷點
此時Spring boot 的 devtools會自動被禁止, 所以就無法使用devtools的特性了.
2. 調試模式下啟動 YourApplication(Spring Boot生成的Application)
如果是Idea IDE, 設置 working directory 為: %MODULE_WORKING_DIR% , 否則jsp/freemarker功能無法找到頁面文件.
(原理可能需要讀源碼, 暫時不去研究)
此模式支持devtools, 只要你重新build 模塊, 應用會自動重新重啟.
還可以研究一下 "Running Application Update Policies".
這樣看起來第二種更簡單, 就是有點奇怪.
POM設置
包含devtools, tomcat(provided). 默認使用內嵌tomcat調試.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>