spring boot遇坑之devtools热启动

devtools简介

devtools可以实现spring boot 工程的热启动(即我们修改的代码修改且被编译后,会自动触发重启工程),由于其采用的双类加载器机制,这个启动会非常快。
双类加载器机制:
AppClassLoader:用于加载不会改变的jar(eg.第三方依赖的jar)(遵循双亲委派原则)
RestartClassLoader :用于加载我们正在开发的jar(eg.整个项目里我们自己编写的类)。当应用重启后,原先的RestartClassLoader 被丢掉、重新new一个RestartClassLoader 来加载这些修改过的东西,而bc却不需要动一下。这就是devtools重启速度快的原因。注:第三方jar包也可以通过配置使用该加载器加载

问题汇总

这里记录了些我在使用devtools时遇到的问题,可以供大家参考下。

配置后不生效

配置参考:
pom配置

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
            <!--<scope>true</scope>-->
            <version>1.5.19.RELEASE</version>
        </dependency>
        <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork><!-- 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->
                </configuration>
            </plugin>
        </plugins>
    </build>

配置不生效时注意检查以下设置:
1、自动编译
在这里插入图片描述
2、ctrl+shift+alt+/ 设置 register
在这里插入图片描述
3、开启自动编译后有些IDE貌似需要按ctrl+s或ctrl+f9才会触发自动编译,编译后才能触发项目重启

添加devtools后项目启动报错

最近从网上度娘了一份spring cloud的代码案例,demo本身不带devtools,启动正常。但是作为懒货无法容忍每次都手动启动项目。所以就尝试引入devtools,并按以上配置好,发现启动项目就报错了。如下图:
在这里插入图片描述
分析:在这里插入图片描述
我这个baseService是通过依赖应用进来的jar包,采用devtools模式时,因为双类加载器机制会由AppClassLoader类加载器加载,而项目代码采用RestartClassLoader类加载器加载。同级别之前的类加载器加载的类不能相互引用导致bean无法注入。(注:这些都是我的自我分析描述,如有出入请指出)
一顿科普后终于找到解决问题:
方式如下:
添加META-INF/spring-devtools.properties 配置
在这里插入图片描述
配置内容如下:
将第三方的包也用RestartClassLoader加载

#restart.include.mapper=/mapper-3.4.2.jar //将第三方的包也用RestartClassLoader加载
restart.include.db-spring-boot-autoconfigure=db-spring-boot-autoconfigure-1.0-SNAPSHOT.jar

希望可以帮助到你

参考

https://segmentfault.com/a/1190000009324801
https://www.cnblogs.com/java-zhao/p/5502398.html
https://blog.csdn.net/qq_20745827/article/details/81316968

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值