这一类问题叫hot swapping,也就是开发时如何能够快速地将代码修改反映到运行的应用服务器中。针对不同的资源有不同的策略来进行资源重新加载

静态资源

静态资源指html/css/js/图片/字体等静态文件,Spring Boot的Maven/Gradle插件在本地运行Spring Boot应用后,会监控这些文件内容的变化,一旦发生变化会自动进行重新加载。如果你使用IDE运行应用,那可能需要根据不同的IDE进行相应的设置。

模板文件

模板文件和静态资源不同,是Web应用程序动态渲染HTTP返回内容的模板文件,为了加速渲染过程,通常应用服务器会将他们的内容缓存起来。在Spring Boot中可以通过在属性文件中配置关闭缓存来达到重新加载的效果:spring.thymeleaf.cache=false

spring.freemarker.cache=false

spring.velocity.cache=false

上述三个属性分别对应选取的模板技术。设置完成后,模板文件修改后也会自动重新加载而不需要重新启动应用。

Java文件

如果修改了Java源代码,那么需要重新编译为新的class文件再重新加载。现代IDE都能够支持这一类字节码级别的hot swapping,但前提是修改不能是类或方法的签名(signature)。

如果使用Maven/Gradle插件启动Spring Boot应用,那么需要配置Spring Loaded插件来支持类的重新加载,参考

值得一提的是,从1.3版本开始,Spring Boot额外提供了开发工具来支持开发时的应用重载/重启。当应用classpath变化后,应用会自动重启,但并非是整个应用完全重启。devtools的原理是使用两个Class Loader,一个Class Loader用来加载没有变化的类——Base Class Loader,另一个用来加载变化的类——Restart Class Loader。每当代码修改后需要重启时,Restart Class Loader都会被丢弃并创建一个新的Restart Class Loader,这种策略相比于完全重启整个应用,速度要快很多。(请注意,Spring Boot 1.3尚未发布正式版,请谨慎在生产环境中使用)。