zoukankan      html  css  js  c++  java
  • Spring Boot热部署 学习笔记

    实现原理
    热部署:直接重新加载整个工程
    热加载:在运行时重新加载字节码文件(基于classloader)

    Java热部署和热加载的联系
    不重启服务器编译/部署项目
    基于Java的类加载器实现

    部署方式上的区别
    热部署在服务器运行时重新部署项目(不用重启服务器)—节省运维时间,提高效率。
    热加载在运行时重新加载class.(Java字节码文件)—当Java类做了一定的修改时, 不需要重启服务, 编译后的字节码文件就可以更新同步。


    类加载的五个阶段
    		加载:找到java的静态存储结构并加载到虚拟机内,转换为方法区运行时使用的数据结构,生成class对象,用户可以自定义类加载器参与进来
    		验证:确保字节码是安全的,确保不会对虚拟机造成危害,可以通过虚拟机的启动参数来禁用一些验证(不推荐)
    		准备:确定内存布局,初始化类变量,是赋初始值(例如:静态变量等赋为0),不会执行方法中赋值语句
    		解析:将符号引用变为直接引用
    		初始化:调用程序自定义代码(例如:静态变量真正赋值为12)

    5种初始化:
    1.遇到new,get, static这几条字节码指令,如果类没有初始化,则需要触发初始化。final修饰的类会在编译时把结果放到常量池中,即使调用也不会触发初始化。final关键字它修饰的是常量。
    2.使用反射对类进行反射调用,如果类没有进行初始化,就需要先初始化
    3.当初始化一个类的时候,如果发现其父类还没有进行过初始化,需要先触发父类的初始化。先初始化父类,在初始化子类。
    4.虚拟机启动的时候用户需要制定一个要执行的主类,虚拟机会先初始化这个主类。
    5.使用jdk1.7动态机制相关的句柄会进行初始化。



    java类加载器特点
    1、由AppClass Loader (系统类加载器)开始加载指定的类
    2、类加载器将加载任务交给其父,如果其父找不到,再由自己去加载
    3、Bootstrap Loader(启动类加载器)是最顶级的类加载器(BootstrapClassLoader是C++实现的,其没有对应的Java子类,只是名义上的所有类加载器父类,因为在ClassLoader中当parent委托对象为null的话会默认BootstrapClassLoader为parent)

    Java类的热部署
    一、类的热加载
      
    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException{
        System.out.println("加载类===" + name );
        byte[] data =loadClassData(name);
        return this.defineClass(name,data,0,data.length);
    }
    

      


    二、配置Tomcat
    1、直接把项目web文件夹放再webapps里。
    2、在tomcatconfserver.xml中的<host></host>内部添加<context/>标签。
    <Context debug="0" docBase="D:/Imooc/web" path="/hot" privileged="true" reloadable="true"/>

      3、在%tomcat_home%confCatalinalocalhost中添加一个XML

    <?xml version="1.0" encoding="UTF-8"?>
    <Context  docBase="D:/Imooc/web" reloadable="true"/>
     
     
  • 相关阅读:
    系统综合实践第三次实践
    系统综合实践第二次实践作业
    第1次实践作业
    软工总结
    团队Beta演示
    团队Beta5
    软工实践个人总结
    第09组 Beta版本演示
    第09组 Beta冲刺(5/5)
    第09组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/lujing-newer/p/8472279.html
Copyright © 2011-2022 走看看