β

Spring Boot集成spring-boot-devtools开发时实现热部署

Harries Blog™ 156 阅读

热部署是什么

大家都知道在项目 开发 过程中,常常会改动页面 数据 或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新 编译 生成了新的Class文件,这个文件里记录着和 代码 等对应的各种信息,然后Class文件将被虚拟机的ClassLoader加载。

而热部署正是利用了这个特点,它监听到如果有Class文件改动了,就会创建一个新的ClaassLoader进行加载该文件,经过一系列的过程,最终将结果呈现在我们眼前。

类加载机制

Java中的类经过编译器可以把代码编译为存储 字节码 的Class文件,该Class文件存储了各种信息,最终要加载到虚拟机中运行使用。类加载机制(摘自《深入理解 Java 虚拟机》)虚拟机把描述类的数据从Class文件加载到内存中,并对数据进行校验、转换 解析 和初始化,最终形成可以被虚拟机直接使用的 Java类 型。

Spring Boot 实现热部署

Spring Boot实现热部署有如下方式:

  1. 使用 Spring Loaded
  2. 使用 spring -boot-devtools

Spring Loaded

这种方式是以Maven 插件 的形式去加载,所以启动时使用通过Maven命令mvn spring-boot:run启动,而通过 App li cat ion.run方式启动的会无效,因为通过应用程序启动时,已经绕开了Maven插件机制。

pom 集成方式:

<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.5.RELEASE</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

spring-boot-devtools

这种方式无论怎么启动应用,都可以达到修改文件后重启应用。

pom集成:

<!-- 热部署模块 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>

集成注意

  1. 如果发现没有热部署效果,则需要检查 IDE 配置 中有没有打开自动编译。
  2. 如果使用Thymeleaf模板引擎,需要把模板默认 缓存 设置为false
#禁止thymeleaf缓存(建议:开发环境设置为false,生成环境设置为true)
spring.thymeleaf.cache=false
  1. 针对devtools的可以指定 目录 或者排除目录来进行热部署
#添加那个目录的文件需要restart
spring.devtools.restart.additional-paths=src/main/java
#排除那个目录的文件不需要restart
spring.devtools.restart.exclude=static/**,public/**

设置 id ea让他实现文件修改自动重启项目

  1. 找到idea的Preferences -> Build, Execution, Deployment -> Compiler,勾选Build project automatically
  2. 回到idea正常界面,Mac使用快捷键shift+option+command+/,window上的快捷键是Shift+Ctrl+Alt+/,打开Registry,勾选compiler.automake.allow.when.app.runningcompiler.automake.allow.when.app.running

通过以上的设置就可以在不重启服务的情况下加载html,但如果修改java文件,服务在几秒后会自动重启,如果不 希望 服务重启需要在application.properties或application.yml中添加spring.devtools.reatart.enable=false

最后更新于 2018-05-13 11:44:56
并被添加「spring boot devtools」标签,已有 1 位童鞋阅读过。

原文

https ://www.ydstudio.net/archives/57.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。 PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处: Harries Blog™ » Spring Boot集成spring-boot-devtools开发时实现热部署

作者:Harries Blog™
追心中的海,逐世界的梦
原文地址:Spring Boot集成spring-boot-devtools开发时实现热部署, 感谢原作者分享。

发表评论