zoukankan      html  css  js  c++  java
  • 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,就能看到应用所使用的数据。

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

  • 相关阅读:
    codeforces 37 E. Trial for Chief【spfa】
    bzoj 1999: [Noip2007]Core树网的核【树的直径+单调队列】
    codehunter 「Adera 6」杯省选模拟赛 网络升级 【树形dp】
    codeforces GYM 100781A【树的直径】
    bzoj 2878: [Noi2012]迷失游乐园【树上期望dp+基环树】
    bzoj 1791: [Ioi2008]Island 岛屿【基环树+单调队列优化dp】
    codeforces 949C
    codeforces 402E
    poj 3613 Cow Relays【矩阵快速幂+Floyd】
    bzoj 2097: [Usaco2010 Dec]Exercise 奶牛健美操【二分+树形dp】
  • 原文地址:https://www.cnblogs.com/youcoding/p/13759294.html
Copyright © 2011-2022 走看看