使用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

使用spring-boot-devtools进行热部署

现在修改HelloController.java类的hello方法,修改后的代码如下:

@RequestMapping("/hello")
	public String hello() {
		return "hello spring-boot-devtools";
	}

无须重启项目,在浏览器中输入如下地址:http://localhost:8080/hello

使用spring-boot-devtools进行热部署