springboot--- devtools(热部署)

技术介绍

  • devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件、属性文件、页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现这个启动比较慢,可以选择使用jrebel)
    • 双类加载器机制:boot使用了两个类加载器来实现重启(restart)机制:base类加载器(简称bc)+restart类加载器(简称rc)
      • bc:用于加载不会改变的jar(eg.第三方依赖的jar)
      • rc:用于加载我们正在开发的jar(eg.整个项目里我们自己编写的类)。当应用重启后,原先的rc被丢掉、重新new一个rc来加载这些修改过的东西,而bc却不需要动一下。这就是devtools重启速度快的原因。

在使用IDEA做SpringBoot的web项目的时候,在每一次修改了java文件或者是resource的时候,都必须去重启一下项目,这样的话浪费了很多的时间(主要是心理感觉非常烦),那么,这个时候,就需要去实现程序的热部署,能够在修改了页面的时候能够立马刷新显现出新的效果。

Eclispe

<!--spring-boot-devtools 热启动依赖包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <scope>true</scope>
</dependency>
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <!--fork : 如果没有该项配置,肯定devtools不会起作用,即应用不会restart -->
        <fork>true</fork>
    </configuration>
</plugin>

  修改代码后,保存Ctrl+S即可 

IDEA

第一步:添加热部署的maven依赖

<!--spring-boot-devtools 热启动依赖包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <scope>true</scope>
</dependency>

第二步:添加maven插件(一般情况下假如用maven管理建立springboot程序的时候,就会自带这个插件的,所以你可以对比一下是否有或者一样,不一样进行修改)。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <!--fork : 如果没有该项配置,肯定devtools不会起作用,即应用不会restart -->
        <fork>true</fork>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

第三步:修改IDEA的设置File--->Other Settings--->Default Settings----->Compiler--->Bulid project automatically打上勾,就按照下图的勾去选择就行了(勾选完毕之后,一定记得点击Apply和Ok按钮使你的选择生效)。

第四步:打开IDEA,组合键Ctrl+Shift+Alt+/,弹出下面界面,选择Registry

或者是按住组合键Ctrl+Shift+A,弹出下面界面,输入Registry,选择第一个Registry

第五步:选择Registry,勾选complier.automake.allow.when.app.running

第六步:由于在开发过程当中经常会修改html、js和css,但是浏览器是有缓存的,我们在开发过程当中可以关闭浏览器的缓存功能,一般是F12唤出开发者工具,然后勾选Disable cache

第七步:在springboot的application.properties文件当中添加下面语句

spring.thymeleaf.cache=false

第八步,修改完代码后需要编译,而不是保存 

补充:

  • 默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。
    • 如果想改变默认的设置,可以自己设置不重启的目录:spring.devtools.restart.exclude=static/**,public/**,这样的话,就只有这两个目录下的文件修改不会导致restart操作了。
    • 如果要在保留默认设置的基础上还要添加其他的排除目录:spring.devtools.restart.additional-exclude
  • 如果想要使得当非classpath下的文件发生变化时应用得以重启,使用:spring.devtools.restart.additional-paths,这样devtools就会将该目录列入了监听范围。

猜你喜欢

转载自blog.csdn.net/yangchuanan/article/details/82428533