有时候咱们开发完SpringBoot项目后,启动运行。可是常常发现代码须要反复修改,而后修改部份内容后须要再启动,这样太费时了,热部署就是用来解决这一问题。让你修改完代码后,能自动执行编译并运行。java
深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另外一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,从新建立一个restart ClassLoader,因为须要加载的类相比较少,因此实现了较快的重启时间。
spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是热部署。该模块在完整的打包环境下运行的时候会被禁用。若是你使用 java -jar启动应用或者用一个特定的 classloader 启动,它会认为这是一个“生产环境”。
spring
加入spring-boot-devtools
依赖和spring-boot-maven-plugin
插件springboot
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>
当咱们修改了Java类后,IDEA默认是不自动编译的,而spring-boot-devtools又是监测classpath下的文件发生变化才会重启应用,因此须要设置IDEA的自动编译。app
(1)依次点开菜单 【File】->【Settings】->【Build,Execution,Deployment】->【Compiler】: 勾选右侧的【Build project automatically】maven
(2)按下Ctrl+Shift+A,打开搜索,输入registry,并打开搜索到的该项设置ide
(3)找到compiler.automake.allow.when.app.running项,并打勾spring-boot
(4)重启IDEA测试
在application.properties中配置spring.devtools.restart.enabled=false,此时restart类加载器还会初始化,但不会监视文件更新。在SprintApplication.run以前调用System.setProperty("spring.devtools.restart.enabled", "false");
能够彻底关闭重启支持。ui
#热部署生效 spring.devtools.restart.enabled: true #设置重启的目录 spring.devtools.restart.additional-paths: src/main/java #classpath目录下的WEB-INF文件夹内容修改不重启 spring.devtools.restart.exclude: WEB-INF/**
注:关于devtools能够自定义不少属性,达到自定义效果。idea