SpringBoot热部署——Eclipse
热部署有三种方式:
-
SpringLoader 插件
-
DevTools 工具
- 安装JRebel插件
注意:热部署的功能依赖于工具的自动编译,Eclipse-->Build Automatically必须勾选。
一、SpringLoader
1. 以 maven 插件方式使用 SpringLoader
(1) 修改pom.xml
<build> <plugins> <!-- springloader 插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.5.RELEASE</version> </dependency> </dependencies> </plugin> </plugins> </build>
(2) 创建测试Controller
@RestController public class TestController { @RequestMapping("/show") public Object showPage(){ System.out.println("show page....."); ModelAndView view = new ModelAndView(); view.setViewName("index"); return view; } }
(3) 编写测试的jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试页面</title> </head> <body> <h3>hello world</h3> </body> </html>
(4) 测试
以Maven命令启动。
右键项目-->Debug As-->Maven Build...(第二个),输入spring-boot:run
通过修改Controller的输出信息和jsp页面的输出信息,可以得出SpringLoader只对Java代码有效,对页面没有效果。
注:Springloader 热部署程序是在系统后台以进程的形式来运行,需要手动关闭该进程,可能会出现端口占用的问题。
2. 在项目中直接使用 jar 包的方式使用 SpringLoader
(1) 下载SpringLoader的jar包添加到类路径下
(2) 右键-->Debug As -->Debug Configurations...
二、DevTools 工具
DevTools的使用比较简单,只需要修改项目的pom文件添加devtools 的依赖即可。
<!-- DevTools 的坐标 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
SpringLoader 与 DevTools 的区别:
-
SpringLoader 在部署项目时使用的是热部署的方式。
-
DevTools 在部署项目时使用的是重新部署的方式。
三、安装JRebel插件
有了DevTools,为什么还要使用JRebel插件呢?
- 额外引入的依赖实际上生产环境并不需要,开发者引入后容易误提交到线上。
- springboot-devtools方式的热部署在功能上有限制。如在方法内的修改可以实现热部署,但是新增的方法或者修改方法参数之后热部署是不生效的。
- 相对于JRebel,springboot-devtools方式热部署的速度可能有点慢
在Eclipse Marketplace...中搜索JRebel进行安装,需要激活,具体怎么使用,请自行搜索。
时刻与技术进步,每天一点滴,日久一大步!!!
本博客只为记录,用于学习,如有冒犯,请私信于我。