spring boot devtools使用和源码解析

spring boot 提供devtools工具spring-boot-devtools用于开发的时候热部署,其实这个特性在nodejs项目里面经常用到,修改一个文件,项目就会自动重启并刷新浏览器,这个特性在开发的时候非常有用。

实践

创建一个spring boot工程,并引入spring-boot-devtools:

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<scope>runtime</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
</dependencies>

然后启动工程,可以看到启动类打印的是restartedMain(Local模式下使用的

org.springframework.boot.devtools.restart.classloader.RestartClassLoader)

《spring boot devtools使用和源码解析》

 

然后修改java代码,在idea上执行Build->BuildProject, 项目就可以自动重启了

《spring boot devtools使用和源码解析》

原理篇

spring boot devtools 的原理其实就是监听classpath下的文件,当文件有变动时,根据配置的策略进行重启。

监听器配置类在

LocalDevToolsAutoConfiguration类,

《spring boot devtools使用和源码解析》

监听类参考  ClassPathFileSystemWatcher 类, ClassPathFileSystemWatcher启动的时候,会将文件监听起起来。

《spring boot devtools使用和源码解析》

这里可以看到,真正的监听类是FileSystemWatcher,它启动一个线程Watcher去监听

《spring boot devtools使用和源码解析》

《spring boot devtools使用和源码解析》《spring boot devtools使用和源码解析》

ClassPathFileChangeListener监听器在监听到文件变化之后,会发送ClassPathChangedEvent事件,LocalDevToolsAutoConfiguration.RestartConfiguration最终捕获到相应的事件并重启应用

《spring boot devtools使用和源码解析》

LocalDevToolsAutoConfiguration.LiveReloadServerEventListener最终捕获到相应的事件并驱使liveReloadServer刷新

《spring boot devtools使用和源码解析》

liveReload请参考http://livereload.com/

    原文作者:Spring Boot
    原文地址: https://blog.csdn.net/Viogs/article/details/84777962
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞