【SpringBoot学习】02. 热部署(自动重启)

项目地址https://gitee.com/better-code/SpringBoot-Example/springboot02


使用 spring-boot-devtools 的好处:

  • 默认禁用缓存选项。比如模板引擎将缓存编译完的模板,以避免重复解析模板文件。
  • 自动重启。只要classpath下的文件有变动,应用就会自动重启。

在运行一个完整的、打包过的应用时,开发者工具(devtools)会被自动禁用。
如果应用使用 java -jar 或特殊的类加载器启动,都会被认为是一个产品级的应用(production application),从而禁用开发者工具。

1. 自动重启

只要在pom中添加spring-boot-devtools依赖


    org.springframework.boot
    spring-boot-devtools
    true

只要classpath下文件有变动,应用就会重启。更妙的是,一些比如静态assets、视图模板文件等资源 文件的变动,应用不会重启。

唯一触发重启的方式就是更新classpath

总结

  • 添加spring-boot-devtools依赖
  • 修改classpath下的Java文件,然后更新classpath,这时应用就会自动重启。
  • 修改classpath下的页面文件,然后更新classpath,但是访问页面可以看到效果(即重新加载)。

IDEA更新classpath的方法:【Build】->【Build Project】,如果你设置了自动编译,那就可以省略这一步了。

注意

有的文章说必须设置以下内容,devtools才能生效。可能因为我用的版本是springboot2.1.2.RELEASE,项目中没有设置下面内容,devtools 照样能生效。

  
      
        org.springframework.boot  
        spring-boot-maven-plugin  
          
              
            true  
          
      
  

原理

Restart vs Reload Spring Boot提供的重启技术是通过使用两个类加载器实现的。
没有变化的类(比如那些第三方jars)会加载进一个基础的类加载器,正在开发的类会加载进一个重启的类加载器。
当应用重启时,重启的类加载器会被丢弃,并创建一个新的。
这种方式意味着应用重启通常比冷启动快很多,因为基础类加载器已经可用并且填充完成

测试步骤

1. 启动Springboot02Application

2. 修改HelloController,然后更新classpath,查看应用是否重启

IDEA更新classpath的方法是:Build -> Build Project

3. 修改hello.html

  • 访问 http://localhost:8080/hello,这时是看不到修改内容的
  • 更新classpath,再次访问http://localhost:8080/hello,看到了修改内容。并且应用没有自动重启。

你可能感兴趣的:(【SpringBoot学习】02. 热部署(自动重启))