zoukankan      html  css  js  c++  java
  • Spring boot热部署配置[转]

    Spring boot热部署配置

    转自https://www.zybuluo.com/weiys/note/1141626


    使用spring boot时,修改类文件或资源文件时,需要重新启动应用才生效,而且一般应用重启消耗时间比较长,非常影响开发效率。这里提供了两种方案解决应用热部署的问题。

    1. 使用spring-boot-devtools模块
    2. 使用Jrebel工具
     

    基于spring-boot-devtools的热部署

    spring-boot-devtools是spring为开发者提供的支持spring boot应用热部署的模块,以提高开发效率,它的实现原理是提供两个ClassLoader,一个基类ClassLoader用于加载不改变的类(如第三方jar包),另一个重启类ClassLoader用于加载应用中会变化的Class。当应用程序重新启动时,重启动类ClassLoader将被丢弃并创建一个新的ClassLoader。这种方法意味着应用程序重新启动会比较快,因为基类加ClassLoader已经可用并且不会重新启动。 
    spring-boot-devtools官方说明

     

    pom.xml配置

    pom.xml引入spring-boot-devtools依赖

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

    pom.xml的plugins节点增加spring-boot maven插件配置

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <fork>true</fork><!--fork配置为true,devtools才会生效 -->
        </configuration>
    </plugin>
    
     

    热部署配置

    在application.yml的spring节点增加以下配置

        spring:
            devtools:
            restart:
                enabled: true                               # 热部署开关,false即不启用
                exclude: static/**,public/**,templates/**   # 排除指定目录
            additional-paths: src/main/java                 # 指定热部署目录
    

    配置项说明如下: 
    enabled:热部署启用开关,true:启用;false:不启用。 
    exclude:配置不触发热部署的目录,也就是该目录下的文件修改不会导致restart。 
    additional-paths:指定热部署的目录,如该目录的文件内容修改了,会自动restart。

    这里配置的热部署目录是java类文件所在路径,将静态资源下的目录排除,也就是只有src/main/java目录下的文件修改才会触发热部署,其它目录修改都不会触发热部署。如果静态资源是放在resources目录下的话,最好还是放在additional-paths中,否则修改了静态资源文件也不会触发热部署。 
    如果是使用Thymeleaf模板引擎的话,需要将缓存去年,否当修改了视图页面的话,刷新页面也不会生效,这是因为spring boot中对模板引擎编译结果进行了缓存。在application.yml增加如下配置,即可去掉缓存:

    spring:
        thymeleaf:
            cache: false
    
     

    Idea配置

    修改了代码需要编译后才会生效,idea默认是不开启自动编译选项,需要手工开启自动编译,开启方式如下: 
    File->Settings->Build,Execution,Deployment->Compiler 
    将Build project automatically选项勾选上。 
    配置自动编译
    当应用是在running或者debugging模式下运行时,开启了该选项还不能自动编译,还需要修改Registry,通过Ctrl+Shift+Alt+/快捷键,打开Registry. 
    Registry.png-5.2kB 
    在Registry配置界面找到compiler.automake.allow.when.app.running配置项,将其value勾选上。 
    Registry2.png-36kB

     

    基于Jrebel的热部署

    虽然说基于spring-boot-devtools的热部署方案可以解决掉手动重启的麻烦,也比手动重启快的多,但是毕竟也要重新加载全部的应用代码,还是觉得比较耗时。这里再介绍另一种方案,使用Jrebel工具。 
    Idea安装方式: 
    1、离线安装:Idea的Jrebel插件地址:Jrebel插件下载 
    2、在线安装:在idea插件管理搜索jrebel,在线安装。 
    Jebel插件.png-44kB 
    安装后重启Idea,在工具栏中看到下图中这几个图标说明已经安装成功。 
    Jrebel.png-4.1kB 
    Jrebel和Idea一样,也提供两种启动模式,Run和Debug模式。使用了Jrebel工具启动应用的话,就会禁掉spring-boot-devtools。在Idea中修改类文件或者静态资源文件,直接按“Ctrl+F9”,Jrebel就会重新加载修改的类文件,然后刷新浏览器就可看到修改的代码已生效。

    Jrebel只重新加载修改过的类文件,没有修改的类不会重新加载,比spring-boot-devtools重新加载快的多。

  • 相关阅读:
    spring boot cli 知识点
    OSX Homebrew 安装 Spring Boot CLI
    前端重定向,index.html文件被浏览器缓存,导致整个应用都是旧的
    单页面应用,接入cdn
    Spring Cloud 之 Hystrix 知识点:隔离、熔断、降级
    Spring Cloud 之 Ribbon 知识点:服务器负载均衡
    Spring Cloud 之 Feign 知识点:封装了 REST 调用
    spring cloud 学习资料
    Gradle 知识点
    Gradle 学习资料
  • 原文地址:https://www.cnblogs.com/awei4home/p/9171757.html
Copyright © 2011-2022 走看看