idea修改代码后没有重新编译_SpringBoot中实现代码修改之后的自动更新与热加载...

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:10   1403   0
8d253e9116b3304cbfbba57d93aea44b.png

在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果。那么有没有一种方式能够快速的、自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,对于这个功能很多人对功能的叫法有争议,也没有权威的定义,笔者知道的就有:热启动、热加载、热更新、热部署。笔者觉得“热加载”可能更准确一些。但是叫什么并不重要,实现了最重要!

1.1.引入devtools的maven依赖

org.springframework.boot spring-boot-devtools true

spring-boot-devtools从名称就可以看出来,是开发者工具包,其主要的功能就是实现热加载。其实现原理就是两个ClassLoader,一个负责加载那些不会经常改变的文件,比如:第三方jar包;一个负责加载可能经常改变的类,比如我们自己在项目中写的代码,被称为restart ClassLoader。当有代码发生改变的时候,重建一个restart ClassLoader,原有的restart ClassLoader被丢掉。由于每次重新加载的内容较少,所以速度比手动重启更快一些。

org.springframework.boot spring-boot-maven-plugin true

在 plugin 中配置另外一个属性 fork,并且配置为 true。

1.2.设置IDEA

运行时编译配置:组合键:“Shift+Ctrl+Alt+/” ,选择 “Registry” ,选中打勾 “compiler.automake.allow.when.app.running” 。

7db1e90cecf94d63b878eb356932b347.png

自动化编译配置: “File” -> “Settings” -> “Build,Execution,Deplyment” -> “Compiler”,选中打勾 “Build project automatically” 。这是一种重新自动化的编译整体项目的方法。但是笔者一般不这么做,因为IDEA的文件是自动保存的,你想修改一个字符串,有可能你只修改完成第一个字符它就重新编译了。所以,笔者一般修改完成之后,使用Ctrl + Shift + F9快捷键对修改类重新编译,而不是做项目的自动化整体编译。

20fade5bb40b1d2d029f93ba5673f52e.png

1.3 进行一下application.properties配置

在有些版本我们需要配置热加载生效的开关,使其值等于true。下文是properties格式配置,喜欢yml格式的同学可以自行调整一下。

#热加载生效spring.devtools.restart.enabled=true#额外新增的热加载目录spring.devtools.restart.additional-paths= src/main/java#热加载排除目录#spring.devtools.restart.exclude= 

默认情况下,支持热加载的目录如下,如果需要其它目录下文件支持热加载需要手动配置:

  1. /META-INF/maven
  2. /META-INF/resources
  3. /resources
  4. /static
  5. /public
  6. /templates

改一下代码,看看会不会生效。通常不生效的原因有两种:

  • JDK编译版本和运行版本不同意,自行学习一下IDEA环境下JDK配置
  • 浏览器缓存或者其他的缓存软件导致的问题

写在最后

点击我的头像进入我的主页,底栏导航里还有更多技术精品合集

本号只做持续的知识输出,希望您能关注、评论、转发!您的支持是我不竭的创作动力!让知识产生价值、让程序员改变世界!

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP