在SpringBoot中使用热部署(DevTools)


1、简介

  有时候咱们开发完SpringBoot项目后,启动运行。可是常常发现代码须要反复修改,而后修改部份内容后须要再启动,这样太费时了,热部署就是用来解决这一问题。让你修改完代码后,能自动执行编译并运行。java


2、使用SpringBoot的devtools实现热部署

Devtools的原理

  深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另外一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,从新建立一个restart ClassLoader,因为须要加载的类相比较少,因此实现了较快的重启时间。
  spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是热部署。该模块在完整的打包环境下运行的时候会被禁用。若是你使用 java -jar启动应用或者用一个特定的 classloader 启动,它会认为这是一个“生产环境”。

spring

1.修改pom文件

加入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>


2.修改idea配置

当咱们修改了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测试


3.修改项目配置文件 (可忽略)

在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


4.测试

  • 修改类–>保存:应用会重启
  • 修改配置文件–>保存:应用会重启
  • 修改页面–>保存:应用不会重启,但会从新加载,页面会刷新(原理是将spring.thymeleaf.cache设为false,参考:Spring Boot配置模板引擎)
相关文章
相关标签/搜索