使用spring-boot-devtools进行热部署
spring-boot-devtools是一个为开发者服务的模块,其中重要的功能就是自动实现把更新的应用代码更改到最新的APP上。其工作原理使用了两个ClassLoader,一个ClassLoader加载那些不会改变的类(例如第三方的Jar包),另一个ClassLoader加载会更改的类,称为RestartClassLoader。这样在有代码更改的时候,原来的RestartClassLoader被丢弃,重新创建一个RestartClassLoader加载更新的类,由于需要加载的类相对而言比较少,所以实现了较快的重启。
示例:使用spring-boot-devtools进行热部署
创建项目,修改pom.xml文件。
增加web开发启动器配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
然后添加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>
创建控制器类以及启动类
程序清单:/jpa/src/main/java/com/dwx/controller/HelloController.java
package com.dwx.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello";
//return "hello spring-boot-devtools";
}
}
程序清单:/jpa/src/main/java/com/dwx/JpaApplication.java
package com.dwx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class JpaApplication {
public static void main(String[] args) {
SpringApplication.run(JpaApplication.class, args);
}
}
启动Spring Boot项目,在浏览器中输入如下地址:http://localhost:8080/hello
现在修改HelloController.java类的hello方法,修改后的代码如下:
@RequestMapping("/hello")
public String hello() {
return "hello spring-boot-devtools";
}
无须重启项目,在浏览器中输入如下地址:http://localhost:8080/hello