Spring Boot Devtools 依赖详解

Spring Boot Devtools 是什么?

顾名思义,DevTools为Spring开发人员提供了一些便利的开发期工具,其中包括:

  • 代码变更后应用会自动重启;

  • 当面向浏览器的资源(如模板、JavaScript、样式表)等发生变化时,会自动刷新浏览器;

  • 自动禁用模板缓存;

  • 如果使用H2数据库的话,内置了H2控制台。

如何使用 Spring Boot Devtools ?

使用 Spring Boot Devtools,只需在 pom.xml 文件中,添加如下依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
</dependency>

在 IDEA 中添加如上依赖后,Spring Boot Devtools 并不会生效,需要手动开启项目自动编译功能,才能生效。

具体操作,参考文章 Spring-boot-devtools 在Idea中不起作用解决办法

应用自动重启

当DevTools运行的时候,应用程序会被加载到Java虚拟机(Java virtual Machine,JVM)两个独立的类加载器中。其中一个类加载器会加载你的Java代码、属性文件以及项目中“src/main/”路径下几乎所有的内容。

这些条目很可能会经常发生变化。另外一个类加载器会加载依赖的库,这些库不太可能经常发生变化。

当探测到变更的时候,DevTools只会重新加载包含项目代码的类加载器,并重启Spring的应用上下文,在这个过程中另外一个类加载器和JVM会原封不动。这个策略非常精细,但是它能减少应用启动的时间。

这种策略的一个不足之处就是自动重启无法反映依赖项的变化。这是因为包含依赖库的类加载器不会自动重新加载。这意味着每当我们在构建规范中添加、变更或移除依赖的时候,为了让变更生效,我们需要重新启动应用。

浏览器自动刷新和禁用模板缓存

默认情况下,像Thymeleaf和FreeMarker这样的模板方案在配置时会缓存模板解析的结果。这样的话,在为每个请求提供服务的时候,模板就不用重新解析了。

在生产环境中,这是一种很好的方式,因为它会带来一定的性能收益。但是,在开发期,缓存模板就不太好了。在应用运行的时候,如果缓存模板,那么我们刷新浏览器就无法看到模板变更的效果了。即便我们对模板做了修改,在应用重启之前,缓存的模板依然会有效。

DevTools通过禁用所有模板缓存解决了这个问题。你可以对模板进行任意数量的修改,只需要刷新一下浏览器就能看到结果。

内置的H2控制台

如果你使用H2数据库进行开发,DevTools将会自动启用H2。这样的话,我们可以通过Web浏览器进行访问。

你只需要让浏览器访问http://localhost:8080/h2-console,就能看到应用所使用的数据。

每天学习一点点,每天进步一点点。

原文地址:https://www.cnblogs.com/youcoding/p/13759294.html