zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    苹果p12文件--一个苹果证书怎么多次使用(蛋疼,这些问题只有和其他企业合作才会遇到,别人的账号不可能给你,蛋疼....)
    xcode 树形管理 cocos2d-x的资源
    cocos2d-x 扩充引擎基类功能 引起的头文件重复包含问题的分析
    pytest--运行指定的测试和参数化
    adb--常用命令
    appium--desktop
    adb--环境安装
    pytest--命令行常用参数
    django -- auth模块
    pytest--常用插件
  • 原文地址:https://www.cnblogs.com/guxia/p/7677191.html
Copyright © 2011-2022 走看看