注意:默认使用Maven项目。
springloader方式:首先在pom.xml中添加依赖
<!-- 构建节点 --> <build> <plugins> <!-- 在这里添加springloader plugin--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <!-- springboaded hot deploy --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.4.RELEASE</version> </dependency> </dependencies> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build>
然后启动,启动有两个方式:
方式1:右键 -> run as --> Maven build ,在Goals中输入spring-boot:run ,然后run 即可热启动,此种方式有一个缺点那就是停止服务后端口仍占用,必须在任务管理器中关闭进程。
方式2:下载所需jar包(spring-loader-1.2.4.RELEASE.jar),添加到项目。 在项目右键 run as --> Run configurations --> Arguments 中,设置VM arguments: -javaagent:.\lib\springloaded-1.2.4.RELEASE.jar -noverify
然后启动
springloader方式只对修改返回值有效,而对添加方法无效。
========================================================================
devtools方式:
首先添加依赖,
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency>
然后添加plugin
<!-- 热部署2:spring boot devtool plugin --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- fork: 如果没有该项配置,devtools不会起作用,即不会restart --> <fork>true</fork> </configuration> </plugin>
然后启动即可。
原理是修改后服务会快速重启,深层原理是使用了两个classloader,一个classloader加载那些不会改变的类,另一个classloader加载会更改的类,成为restart Classloader。
这样代码有更改的时候,原来的restart Classloader被丢弃,重新创建一个restart Classloader,由于需要加载的类比较少,所以实现了较快的重启时间(5s以内)。
对于添加方法仍有效。