Spring Boot 实现开发时热部署

热部署原理:html

它监听到若是有Class文件改动了,就会建立一个新的ClaassLoader进行加载该文件,通过一系列的过程,最终将结果呈如今咱们眼前。java

类加载机制:spring

Java中的类通过编译器能够把代码编译为存储字节码的Class文件,该Class文件存储了各类信息,最终要加载到虚拟机中运行使用。虚拟机把描述类的数据从Class文件加载到内存中,并对数据进行校验、转换解析和初始化,最终造成能够被虚拟机直接使用的Java类型。缓存

Spring Boot 实现开发时热部署:app

Spring Boot 实现热部署有以下方式maven

使用 Spring Loaded
使用 spring-boot-devtoolside

Spring Loaded
这种方式是以Maven插件的形式去加载,因此启动时使用经过Maven命令mvn spring-boot:run启动,而经过Application.run方式启动的会无效,由于经过应用程序启动时,已经绕开了Maven插件机制。
pom集成方式:spring-boot

<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>ui

spring-boot-devtools
这种方式不管怎么启动应用,均可以达到修改文件后重启应用。
pom集成:idea

<!-- 热部署模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个须要为 true 热部署才有效 -->
</dependency>
集成注意
若是发现没有热部署效果,则须要检查IDE配置中有没有打开自动编译。
若是使用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/**

设置idea让他实现文件修改自动重启项目1.找到idea的Preferences -> Build, Execution, Deployment -> Compiler,勾选Build project automatically2.回到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

相关文章
相关标签/搜索