zoukankan      html  css  js  c++  java
  • Spring boot 两种热部署方式 springloader 和 devtools

    什么是热部署?
    热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。在平时编写代码的时候,你会发现我们只是简单把打印信息改变了,就需要重新部署,如果要改变这样的方式,就需要用到热部署springloaded。

    使用方式,在项目中的pom.xml中plugin里添加依赖:

    <dependencies> 
      <!--springloaded  hot deploy --> 
      <dependency> 
          <groupId>org.springframework</groupId> 
          <artifactId>springloaded</artifactId> 
          <version>1.2.4.RELEASE</version>
      </dependency> 
    </dependencies> 
    <executions> 
      <execution> 
          <goals> 
              <goal>repackage</goal> 
          </goals> 
          <configuration> 
              <classifier>exec</classifier> 
          </configuration> 
      </execution> 
    </executions>

    如果使用的run as,Java application的话,那么需要做如下处理:

    把spring-loader-1.2.8.RELEASE.jar下载下来,放到项目的lib目录中,点击下载

     然后设置Eclipse的run参数里VM参数

     填写springloaded-1.2.8.RELEASE.jar路径“-javaagent:.libspringloaded-1.2.4.RELEASE.jar -noverify”。

     点击run 即可运行项目,再次修改java文件即时生效,我们修改方法的返回值,这样在run as的时候,也能进行热部署了。直接访问就可以得到修改后的结果了。

    这里要注意的是,使用springloader这种方式,这并不是所有的代码都能够热部署的。使用devtools这种方式可以实现大部分代码的热部署。

    spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。

    其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader
    ,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)。

    使用方法:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
        <scope>true</scope>
    </dependency> 

    把上面的pom.xml中的pulgin替换成下面的代码

    <build>
            <plugins>
            <!-- 这是spring boot devtool plugin -->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <!--fork :  如果没有该项配置devtools不会起作用,即应用不会restart -->
                        <fork>true</fork>
                    </configuration>
                </plugin>
            </plugins>
    </build>

    配置完成,重新启动项目可以试着修改代码,热部署成功,方便手动重启的时间,也加快了开发速度。

    说明:
    1、devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的。
    2、devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现(这里注意不同的模板配置不一样)。
    在修改以下代码都不需要重启服务器:修改类、配置文件、页面文件(原理是将spring.thymeleaf.cache设为false)之后ctrl+s:应用会重启。

    如果不能使用的话,以下就几种常见的问题:
    1、对应的spring-boot版本是否正确,这里使用的是1.5.3版本;
    2、是否加入plugin以及属性<fork>true</fork>
    3、Eclipse Project 是否开启了Build Automatically(开启自动编译的功能)。
    4、如果设置SpringApplication.setRegisterShutdownHook(false),则自动重启将不起作用。



  • 相关阅读:
    el-select下拉框选项太多导致卡顿,使用下拉框分页来解决
    vue+elementui前端添加数字千位分割
    Failed to check/redeclare auto-delete queue(s)
    周末啦,做几道面试题放松放松吧!
    idea快捷键
    解决flink运行过程中报错Could not allocate enough slots within timeout of 300000 ms to run the job. Please make sure that the cluster has enough resources.
    用.net平台实现websocket server
    MQTT实战3
    Oracle 查看当前用户下库里所有的表、存储过程、触发器、视图
    idea从svn拉取项目不识别svn
  • 原文地址:https://www.cnblogs.com/zouhong/p/12182424.html
Copyright © 2011-2022 走看看