• SpringBoot的spring-boot-devtools的不正确使用方法


    以下都是错误的,……不能说全错,不过当时没有注意一个问题,今天看springcloud的教学,结果有讲dev-tools的使用,用了2天了,都是成功的。视频地址:尚硅谷springcloud教学:热部署Devtools

    博客先不修改,最近没啥时间,我也想知道我之前作为一个菜逼的时候是怎么想的(虽然现在还是菜逼),忽略了一个问题导致启用失效。

    1.spring-boot-devtools在官方文档是叫做Hot Swapping,它的主要作用是快速重启

    2.我个人认为这个spring-boot-devtools在IDEA上使用是有坑的,至于是IDEA的问题还是说这个依赖有问题就不清楚了。

    3.我从今天早上4点半开始研究这个spring-boot-devtools到底怎么用,直到现在我明确的表示拒绝使用了。除非我找到什么解决方法。

    开始正文:我会详细讲讲在这上面遇到的坑

    我的环境:

    IDEA2018.3.5.x64 破解版(jar包破解)

    Spring-Boot 2.2.6.RELEASE

    很多人使用spring-boot-devtools应该是朝着能够动态编译修改后的代码去的,使得开发更加方便。

    下面讲述下使用:

    1.请不要再找什么博客之类的去学习操作了,他们说来说去无非就是4步,添加devtools依赖,<plugin>中配置<configuration><fork>true</fork></configuration>,IDEA的setting设置自动编译,然后快捷键打开IDEA的Registry对compiler.automake.allow.when.app.running✔。

    我不得不吐槽下,我找了20+篇博客,其中一半多是一个字都没变的,你们到底是同一个人写的呢?还是转发或者复制?说明都不给一个?而且其中一半连<optional>和<scope>到底有什么用都搞不清,就来一句“必须要加上这个”,我真的……虽然我很菜……但是……

    其中将近三分之一的博客是写对了的,但是它对了不代表自己照着操作就能保证自己是正确的。其中只有3篇博客是给我了一点帮助的,其他的……。

    2.我个人推荐你使用IDEA的联网模板方式。

    请按着上面的方式来操作,第二幅图请选择Maven Project,而不要选择Maven POM,第三幅图可以选择加上选中web选项。

    我为什么推荐联网的官方模板?因为这个真的是有坑,请看下一步。

    3.开始创建一个@RestController,写一个GetMapping,随便return些什么String,其他文件不需要动,不要创建子模块,更不要把测试devtools的代码写在子模块中也不需要任何的IDEA设置

    4.开始检测你的spring-boot-devtools是否有坑:启动Spring Boot的main方法,浏览器输入地址,可以看见结果正确。开始修改return的返回值,请手动build或者重编译这三个按钮最好都试几下,虽然是选择其中一个就可以,但是我这边出现过问题,点击后请注意控制台(是控制台,devtools和target目录没关系,上面的任意一个按钮都可以改变target目录的文件,但是并没有什么用,要控制台有重启的表示才算可以)。因为devtools是重新启动的,启动了的话,控制台就会有输出,就和自己选择Spring Boot的main方法启动后的控制台输出一样。如果有重新输出,说明你的devtools可以正常使用,但如果这三个按钮试来试去都没反应,那么就说明devtools不可用,建议放弃,不要浪费时间了。(这个看运气,我创建了10个项目,8个是maven改成Spring Boot,2个是联网的官方模板),其中官方模板只有1个成功,2个maven改有时有反应。注意事项:不要点击Rebuild Project,这个相当于重启Spring Boot的main方法,和devtools完全没关系。不要在修改pom文件后点击这三个按钮,pom的某些配置改变会导致按这三个按钮有devtools看起来成功的类似效果。我说的测试devtools的测试类是写在父模块下的,意思就是叫你不要创建子模块,子模块中的devtools依赖完全不起作用(同时改变两份文件,在父模块devtools有效果的情况下,子模块也完全无效)。

    5.第4步如果你成功了,就继续看。上面的三个按钮是自己手动控制,现在介绍自动。我的环境不需要设置<fork>true</fork>,也就是说你现在只需要对IDEA进行设置(开头讲的4步操作的后2步),项目文件不需要动,如果不知道如何设置,请百度,网上一大堆。设置好后,可以选择重启也可以不重启,最好重启下IDEA或者干脆重启电脑(万无一失,滑稽),反正我没重启也成功了。

    6.重复第4步的操作,等待7-30秒,最好选择在浏览器上每隔10秒就按一次刷新。注意:请不要时常关注target目录的编译结果,即使你能够正常自动重启,但只要切换到target,自动重启就会延后,甚至频繁切换target会导致自动重启暂时性的失效。

    7.如果以上你都没有问题,那么请自己琢磨子模块中devtools怎么使用吧,至少我是不会的。赶紧折腾一整天的spring-boot-devtools啥都没搞会,就只知道了这是重新启动,而不是那些个博客中说的热部署。

    附上官方文档:

    Hot Swapping

    自从看视频后学会了devtools的使用,感觉自己是个沙雕,这么明显的问题都没有看出来,当时……
    多模块的项目尽量每一个模块单独一个devTools,不要放在父pom的<dependencies>标签里面。

  • 相关阅读:
    Nginx解决跨域
    子网掩码的作用
    并发与并行
    Java8 parallelStream与迭代器Iterator性能
    Spring Data MongDB空间索引(判断一个点Point是否在一个区域Polygon内)
    BeanFactory的实现原理
    序列化以及反序列化
    MongoDB用户名和密码
    Cannot assign to 'self' outside of a method in the init family
    OC方法和文件编译
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/12757274.html
Copyright © 2020-2023  润新知