V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hansonwang99
V2EX  ›  程序员

SpringBoot 热部署加持

  •  
  •   hansonwang99 ·
    hansonwang99 · 2018-06-22 20:38:12 +08:00 · 3512 次点击
    这是一个创建于 2356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Ultrafine 5K


    概述

    进行 SpringBoot 的 Web 开发过程中,我们很多时候经常需要重启 Web 服务器才能保证修改的 源代码文件、或者一些诸如 xml 的配置文件、以及一些静态文件生效,这样耗时又低效。所谓的热部署指的是我们不需要重启 Web Server 就可以保证各项文件修改的立即生效。下面便来介绍一下在 IDEA 中进行 SpringBoot 的 Web 开发时如何加入热部署的支持。

    这里我们是使用 spring-boot-devtools 来帮助完成这个事情,其是一个为开发者服务的模块,可以实现 SpringBoot 热部署。其机理就是 spring-boot-devtools 会监听 classpath 下的文件变动,变动保存生效,其就会立即重启应用。



    pom.xml 中添加依赖

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


    设置 IDEA 环境自动编译

    首先在编译器选项中选中自动编译工程的选项,如下图所示,

    设置 IDEA 自动编译

    接下来我们利用快捷键:Command + Shift + Alt + / 来调出 Registry 窗口,然后勾选其中的编译器自动编译选项,如下图所示:

    设置 IDEA 自动编译



    启动项目并实验

    上面几个步骤设置完成以后,我们去项目的根目录下执行命令来启动 SpringBoot 应用:

    mvn clean spring-boot:run
    

    此时的效果是只要我们修改了编辑区的源代码,保存之后,应用程序便会自动重启让修改生效。



    监听文件夹的变化

    上面我们是修改源代码时的自动热启动,除此之外,我们还可以设置 spring-boot-devtools 来监听某个文件夹的变化,比如我们想监听某个静态文件夹下文件的变化(如 html 文件),当其下面的文件改变的时候能够重新启动 SpringBoot,那么我们只要在配置文件 application.properties 中添加如下配置即可:

    spring.devtools.restart.additional-paths = src/main/resources/templates 
    

    随后再次实验,取得的效果和之前一样,热启动便生效了



    后记

    作者更多的 SpringBt 实践文章在此:


    如果有兴趣,也可以抽点时间看看作者一些关于容器化、微服务化方面的文章:


    11 条回复    2018-06-24 10:01:27 +08:00
    lhx2008
        1
    lhx2008  
       2018-06-22 20:42:21 +08:00 via Android
    没卵用,和 tomcat 的差不多,比 JREBEL 差远了
    subspace
        2
    subspace  
       2018-06-22 20:44:12 +08:00
    我平时使用的是 Jrebel 来热部署。
    pom.xml 加了“ spring-boot-starter-tomcat ”这个依赖
    CDuXZMAPgHp1q9ew
        3
    CDuXZMAPgHp1q9ew  
       2018-06-22 22:10:59 +08:00
    用外置 tomcat 起应用, 自带热加载, 比配置这个方便多了.
    letitbesqzr
        4
    letitbesqzr  
       2018-06-22 22:21:03 +08:00
    在开发模式下:这方案和 jrebel 没法比吧,毕竟 jrebel 对各主流框架进行了处理,比如重扫描 RequestMapping
    在生产环境下: 任何热部署方案都没 Blue/Green Deployment 来的实在。
    azygote
        5
    azygote  
       2018-06-22 22:23:48 +08:00
    devtools 没 jrebel 好用
    hansonwang99
        6
    hansonwang99  
    OP
       2018-06-22 22:49:54 +08:00 via iPhone
    向楼上各位大佬致敬
    bianjp
        7
    bianjp  
       2018-06-23 00:16:34 +08:00
    JRelbel 确实好用,但价格实在太贵了($550 每年),是 IntelliJ IDEA 的好几倍,用不起。
    hlwjia
        8
    hlwjia  
       2018-06-23 00:21:42 +08:00
    请问,头图是什么意思?
    ZSeptember
        9
    ZSeptember  
       2018-06-23 10:06:42 +08:00
    这个也值得写个文章。。
    Flicker
        10
    Flicker  
       2018-06-23 11:06:48 +08:00 via Android
    在用 jrebel,之前免费就注册了个账号。
    erosripe
        11
    erosripe  
       2018-06-24 10:01:27 +08:00 via Android
    这个 V2EX 不是写个入门。。就会火的,些入门会被喷的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:57 · PVG 08:57 · LAX 16:57 · JFK 19:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.