Spring Boot 热部署

热部署

所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。

对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部署的过程中,类装入器扮演着重要的角色。大多数基于Java的应用服务器,包括EJB服务器和Servlet容器,都支持热部署。类装入器不能重新装入一个已经装入的类,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。—— [ 百度百科 ]

类加载机制

Java 中的.Java类文件都是经过编译器然后把代码编译为存储字节码的 .Class 文件,这个编译后的.Class文件就包含了各种信息,之后便是要加载到JVM虚拟机中运行使用。

虚拟机把描述类的数据从 Class 文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型。——摘自《深入理解 Java 虚拟机》

Spring Boot 热部署

Spring Boot 官网给我提供了一个spring-boot-devtools这个工具jar包,而我们只许把这个jar宝引入项目就可以完成热部署。

修改项目pom.xml文件

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-devtools</artifactId>  
    <optional>true</optional>
    <!-- 必须修改为true,默认是false -->
    <!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->  
</dependency>  

测试实现

重新编译修改java类文件

双类加载器机制 
当我们修改了一个java类(不止是业务逻辑,包括修改、添加、删除方法以及修改接口名称)的时候,在重新编译后项目classpath文件下的.class 文件后,Spring Boot的就会快速重启。因为devtools这个工具包会监听classpath下的文件变动,所以当java类重新编译的时候,devtools会监听到这个变化,然后就会重新启动SpringBoot。这个重启是非常快的一个过程。因为在SpringBoot中有两个类加载器,一个是加载工程外部资源的,如jar包,还有一个类加载器是用来加载本工程的class的。所以此时在重启SpringBoot的时候只加载本工程的class文件。 
项目启动用时:2.325秒 
项目启动
修改编译自动启动用时:0.739秒 
这里写图片描述

修改页面文件html OR jsp

页面修改后会立即生效,刷新即可。

监听修改文件夹选择重启

devtools工具包还可以监听文件夹的变化,从而人为控制修改相应的文件才会重启项目。

#添加那个目录的文件需要restart
spring.devtools.restart.additional-paths=src/main/java/*
#排除那个目录的文件不需要restart
spring.devtools.restart.exclude=static/*

来自:http://m.blog.csdn.net/m0_37995707/article/details/77379304

posted @ 2017-10-16 15:34  孤夏  阅读(355)  评论(0编辑  收藏  举报