诡异的项目开发时热加载丢失编译的类文件问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
abcbuzhiming
V2EX    Java

诡异的项目开发时热加载丢失编译的类文件问题

  •  
  •   abcbuzhiming Jan 10, 2021 2060 views
    This topic created in 1933 days ago, the information mentioned may be changed or developed.
    我们的项目组使用了 spring-boot-devtools,开发 IDE 是 IDEA 的社区版,社区版并不具备商业版的自动 update 热加载方案。所以我们以前的工作流是:修改某个 class保存选菜单,buildbuild 这个 class,因为 build 过程中会触发 class 文件更新被 spring-boot-devtools 捕捉到,就会完成热加载过程。这个方案一直工作的很好。

    知道今天同事反映,有一个模块 A,有些奇怪,修改了 Controller,触发热重载,然后这个 Controller 下的所有 api 路径全部就 404 了,只能停止并重启才能正常。我很奇怪于是研究了一下,发现是这个被修改的 Controller 并没有在热重载时被载入,也就是这个 class“被丢失了”。进一步发现这个问题在所有人的 IDE 上都会复现,每次都一定出现。

    我就觉得很奇怪了,首先去网上搜索了一下方案,发现 spring 提到了两个变量
    spring.devtools.restart.poll-interval
    spring.devtools.restart.quiet-period

    前者是 spring devtools 多久去检测一次 class 变动,后者是 devtools 缄默间隔时间。网上有个解释,说,如果你编译时间太长,超过了 devtools 的检测时间,就会导致 devtools 认为你这个 class 被删除了,所以不会重新载入。

    我尝试拉长第一个选项到 3 秒,确实能解决这个问题。

    但是很奇怪,因为这个项目不止这个模块,其它模块可没有设置这个选项啊,为啥其它模块没有这个问题?

    然后我开始了漫长的对比测试,最终发现,出问题的这个模块 A,执行 buildbuild class 这个过程中,所花费的时间,和别的模块没有区别,但是离谱的是,从日志滚动可以看出,A 模块的 spring-boot-devtools 比其它模块,更早的开始执行热重载(日志开始有动作的时间点)。这一点是导致 A 模块丢失编译的类文件的核心问题。

    我做了很多测试,包含把上面两个配置给 A 模块和其它模块都配上,而且都设置为系统默认的时长,poll-interval 为 1000ms,quiet-period 为 400ms 。但是没用,A 模块每次都会更早的(编译进度条还没跑完)热重载。实在想不通这是哪个环节造成的问题。

    A 模块和其它模块都在一个项目下面,执行他们的时候都在同一个 IDEA,应该可以排除 IDE 问题,我看了一下 IDE 生成的 IML 文件,也没发现异常。

    实在没有思路了,请高人赐教
    3 replies    2021-01-11 08:47:46 +08:00
    micean
        1
    micean  
       Jan 10, 2021
    之前我遇到过 recompile 导致 target 里的相应文件丢失的情况,具体怎么解决的倒是忘记了。。。。清下 idea 缓存试试?
    abcbuzhiming
        2
    abcbuzhiming  
    OP
       Jan 10, 2021
    @micean 我这个,文件并没有丢失,我去看过,文件还在,但是 spring-boot-devtools 提前加载导致它“错误”了这个 class
    kingfalse
        3
    kingfalse  
       Jan 11, 2021 via Android   1
    裤子还没脱就拉了呗
    About     Help     Advertise     Blog     API     FAQ     Solana     3056 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 15:01 PVG 23:01 LAX 08:01 JFK 11:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86