SpringBoot学习历程(三):Devtools热部署
前言1. 引入Spring-Boot-devtools2. 热部署生效3. springboot提供的属性4. jrebel插件
前言
本人github仓库地址:https://github.com/RabbitsInTheGrass/springBoot-Learning
所谓的热部署就是在你修改了后端代码后不需要手动重启,工具会帮你快速的自动重启是修改生效。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
1. 引入Spring-Boot-devtools
<!-- 引入热部署依赖
-->
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-devtools
</artifactId
>
<scope>true</scope
>
<optional>true</optional
>
</dependency
>
<build>
<plugins>
<plugin>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-maven
-plugin
</artifactId
>
<configuration>
<!-- 没有该配置,devtools 不生效
-->
<fork>true</fork
>
</configuration
>
</plugin
>
</plugins
>
</build
>
devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机)。 注意: 《fork》标签的作用不太确定,有说是:避免 devtools 传递性的被应用到项目中其他的 module。
2. 热部署生效
在配置文件application.yml中添加 :
spring:
devtools:
restart:
enabled: true
freemarker:
cache: false
在File >>> Settings >>> Build,Execution,Deployment >>> Compiler 中找到Build project automatically 并勾选。 用Ctrl+Shift+A 快捷键打开 Registry,点击之后找到"compiler.automake.allow.when.app.running",勾选,【Close】关闭。重启IDEA即可。
3. springboot提供的属性
#
----------------------------------------
#开发人员属性
#
----- -----------------------------------
#DEVTOOLS(DevToolsProperties)
spring
.devtools
.add
-properties
= true #是否启用开发属性默认值。
spring
.devtools
.livereload
.enabled
= true #是否启用与livereload
.com兼容的服务器。
spring
.devtools
.livereload
.port
= 35729 #服务器端口。
spring
.devtools
.restart
.additional
-exclude
= #应当从触发完全重启中排除的其他模式。
spring
.devtools
.restart
.additional
-paths
= #监视更改的其他路径。
spring
.devtools
.restart
.enabled
= true #是否启用自动重启。
spring
.devtools
.restart
.exclude
= Tests
.class
spring.devtools.restart.log-condition
-evaluation
-delta
= true #是否在重新启动时记录条件评估增量。
spring
.devtools
.restart
.poll
-interval
= 1s #等待两次轮询类路径更改之间的时间。
spring
.devtools
.restart
.quiet
-period
= 400ms #触发重新启动之前,无需对类路径进行任何更改所需的安静时间。
spring
.devtools
.restart
.trigger
-file
=#更改后触发重新启动检查的特定文件的名称。如果未指定,则任何类路径文件更改都会触发重新启动。
#REMOTE DEVTOOLS(RemoteDevToolsProperties)
spring
.devtools
.remote
.context
-path
= /。
~~ spring
-boot!〜#用于处理远程连接的上下文路径。
spring
.devtools
.remote
.proxy
.host
= #用于连接到远程应用程序的代理主机。
spring
.devtools
.remote
.proxy
.port
= #用于连接到远程应用程序的代理的端口。
spring
.devtools
.remote
.restart
.enabled
= true #是否启用远程重启。
spring
.devtools
.remote
.secret
= #建立连接所需的共享机密(启用远程支持所必需)。
spring
.devtools
.remote
.secret头名
= X
-AUTH
-TOKEN #用于传输共享密钥的HTTP标头。
4. jrebel插件
livereload ,jrebel之类的插件也可以,但是个人感觉没有devtools强大。