美文网首页Spring cloud
SpringBoot笔记2:热部署(自动重启)

SpringBoot笔记2:热部署(自动重启)

作者: _水杉 | 来源:发表于2019-01-15 18:06 被阅读13次

    使用spring-boot-devtools 的用处:

    • 默认禁用缓存选项。比如模板引擎将缓存编译完的模板,以避免重复解析模板文件。
    • 自动重启。只要classpath下的文件有变动,应用就会自动重启。

    在运行一个完整的,打包过的应用时,开发者工具(devtools)会被自动禁用。
    如果应用使用 java -jar 或特殊的类加载器启动,都会被认为是一个产品级的应用(production application),从而禁用开发者工具。

    1. 自动重启

    只要在pom中添加spring-boot-devtools依赖

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

    只要classpath下文件有变动,应用就会重启。更妙的是,一些比如静态assets、视图模板文件等资源 文件的变动,应用不会重启。

    唯一触发重启的方式就是更新classpath

    总结

    • 添加spring-boot-devtools依赖
    • 修改classpath下的Java文件,然后更新classpath,这时应用就会自动重启。
    • 修改classpath下的Java文件,然后更新classpath,但是访问页面可以看到效果(即重新加载)。

    IDEA更新classpath的方法:【Build】->【Build Project】,如果你设置了自动编译,那就可以省略这一步了。

    注意

    有的文章说必须设置以下内容,devtools才能生效。可能因为我用的版本是springboot2.1.2.RELEASE,项目中没有设置下面内容,devtools 照样能生效。

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

    原理

    Restart vs Reload Spring Boot提供的重启技术是通过使用两个类加载器实现的。
    没有变化的类(比如那些第三方jars)会加载进一个基础的类加载器,正在开发的类会加载进一个重启的类加载器。
    当应用重启时,重启的类加载器会被丢弃,并创建一个新的。
    这种方式意味着应用重启通常比冷启动快很多,因为基础类加载器已经可用并且填充完成

    gitee项目代码地址 /springboot02

    相关文章

      网友评论

        本文标题:SpringBoot笔记2:热部署(自动重启)

        本文链接:https://www.haomeiwen.com/subject/swqydqtx.html