原理:
- 在class字節(jié)碼發(fā)生變動時羹与,可以讓classloader重新加載故硅,而達到不重啟應(yīng)用的效果。
- 以下介紹的兩種工具都使用了相同的手段:更換了類加載器W莞椤3孕啤!
devtools.restart.classloader.RestartClassLoader
而不是
sun.misc.Launcher$AppClassLoader
- 日志中的變化:
如果日志出現(xiàn)了 [ restartedMain] ,即表示更換成功腾誉!
2019-08-22 13:05:59.761 INFO 3504 --- [ restartedMain] cn.johnyu.demo02.Demo02Application :
工具:
一徘层、 springloaded
1. 配置方法 pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
2. 啟動方法:
mvn spring-boot:run
3. 缺點:
只能使用maven方式啟動,否則無法達到目的利职。
二趣效、spring-boot-devtools
1. 配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
2. 啟動:
無限制
3. 需要注意:
(1)在application.properties中加入[可選操作]:
#禁止thymeleaf緩存(建議:開發(fā)環(huán)境設(shè)置為false,生成環(huán)境設(shè)置為true)
spring.thymeleaf.cache=false
#添加那個目錄的文件需要restart
spring.devtools.restart.additional-paths=src/main/java
#排除那個目錄的文件不需要restart
spring.devtools.restart.exclude=static/**,public/**
(2)在idea進行配置【必選】:
打開自動自動構(gòu)建功能
Preferences -> Build, Execution, Deployment -> Compiler
眼耀,勾選Build project automatically
運行期自動編譯(不重啟動應(yīng)用):
進入Registry...
中(Mac使用快捷鍵shift+option+command+/
,window上的快捷鍵是Shift+Ctrl+Alt+/
)
勾選:compiler.automake.allow.when.app.running
4. 禁用此功能:
硬編碼:System.setProperty("spring.devtools.restart.enabled", "false");
application.properties: spring.devtools.restart.enabled
注意原因不明佩憾,不起作用
較全的pom.xml中的片段:
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>