• springboot系列之热部署


    springboot提供了热部署,所谓热部署就是当你修改了代码,不用重新启动服务器部署应用,而你只要重新编译一下当前项目,修改的代码就自动生效了,这样极大的节省了部署应用时间,对于开发体验还是有很大提升的,因为我们不用一修改了代码就部署应用,因为部署应用也是会花费很长时间的。在idea中点击如下按钮:

    一、springboot的热部署的两种方式

    一种是利用SpringLoader插件,另一种是使用DevTools工具。

    1、第一种使用SpringLoader插件
    在pom.xml文件中导入如下插件:

      <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <dependencies>
                        <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>springloaded</artifactId>
                            <version>1.2.8.RELEASE</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    

    然后以spring-boot:run命令的方式启动应用。

    springLoader的缺陷:springLoader只对java代码进行热部署处理,无法实时更新页面,也就是说它对页面无能为力。

    注意:这种方式的缺点是springLoader热部署程序是在系统后台以进程的形式来运行的,当第二次运行时会报端口占用的异常,因此需要手动关闭该进程。关闭如下图所示进程:


    2、第二种使用DevTools工具

    修改pom.xml文件,添加如下依赖:

    <!-- springBoot devtools的热部署 修改代码之后需要重新编译一下即可 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
    

    热部署插件的原理:主要有两个类加载器:base classloader 和restart classloader。
    base classloader用于加载那些不会变化的类,例如各种第三方依赖,而restart classloader用来加载那些变化的类,例如你修改了的类。
    springboot中热部署的原理:当代码发生了变化时,base classloader不变,restart classloader被废弃了,被另一个restart classloader替代了。在整个过程中只是加载了变化了的类而不是全部重新加载,所以速度会更快。devtools中默认嵌入了livereload服务器,利用它可以实现静态资源的热部署。LiveReload可以在静态资源发生变化时自动触发浏览器更新,它支持Chrome、Firefox以safari。它就是一个插件只需要在Chrome浏览器或者Firefox浏览器添加一个插件就可以了。LiveReload是和浏览器的选项卡绑定在一起的,在哪个选项卡打开就在哪个选项卡生效。如果安装并且启动了LiveReload插件但是又不想使用则可以在springboot配置文件中添加spring.devtools.livereload.enabled=false即可关闭静态资源的热部署加。

    三、SpringLoader与DevTools的区别

    SpringLoader在部署项目时使用的是热部署的方式,而DevTools在部署项目时使用的是重新部署的方式。

  • 相关阅读:
    把Discuz!NT放在虚拟目录下
    表格样式
    页面CSS的问题,不懂中
    临时存储信息
    asp.net2.0事务
    repeater控件分成两列显示
    P2P的NAT研究
    javascript字符串trim的实现
    新浪微博OAUTH2验证
    新浪微博接口在safri下的bug
  • 原文地址:https://www.cnblogs.com/jasonboren/p/14743314.html
Copyright © 2020-2023  润新知