开发项目的时候,如果项目较大,稍微改个东西就要重启,那也太影响心情了。
主要有三种方式:
1、IDEA热加载;2、spring-boot-devtools 3、jrebel
热加载:运行时更新class。
热部署:运行时重新部署项目。
一、IDEA热加载
1、自带功能(推荐⭐⭐⭐⭐)
其实IDEA功能强大,已经自带了热加载,而且使用方便。它的使用方法也很简单,首先保证是自动编译:
File->Settings->Build->Compiler,勾选build project automatically
如果是老版本还需要修改:
按快捷键Ctrl+Alt+Shift+/ (如果出来Registry…则点击进入),勾选compiler.automake.allow.when.app.running
修改代码后,按ctrl+shift+f8(编译当前文件)即可。
缺陷:只能对修改已有方法生效,如果启动后新建方法则不生效。会给出下面的提示:
评价:方便可控!速度快!就是修改范围有限!
2、自动更新(推荐⭐⭐)
配置失去焦点时自动更新,比如切换窗口就生效,无需手动按ctrl+shift+f8。
评价:看似方便,实际用起来体验并不好,有时候并没有改什么,你要切窗口的时候,它也更新弹出提示窗口,实在烦人。
二、springboot-devtools(⭐⭐⭐⭐)
1、添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>provided</scope>
<optional>true</optional>
</dependency>
2、启动类的main方法中可以手动控制:
System.setProperty("spring.devtools.restart.enabled", "true");
也可以配置在application.properties
spring.devtools.restart.enabled=false
3、自定义资源路径
默认情况下,/META-INF/maven、/MET A-INF/resources、/resources、/static 、/public 以及 /templates位置下资源的变化并不会触发重启,如果开发者想要对这些位置进行重定义 ,在 application.properties 中添加如下配置即可:
spring.devtools.restart.exclude=static/**
4、需要添加插件才能生效
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
使用起来也简单,就是切换窗口的时候,就会自动重启服务。与直接启动的区别在于它的重新启动并不是完整的重启整个应用,而是只重启我们的应用代码。
评价:和idea自带热更新相比,这个方式毕竟是重启,所以新建方法和修改xml语句都是能够生效的。
三、jrebel插件(⭐⭐⭐)
因为是收费,并且效果没有显著提升。
jrebel号称比springboot-devtools更快,因为它是更新修改过文件,而springboot-devtools应该是更新应用代码,不过jrebel是收费的。
jrebel不止可以用在springboot项目,java项目都可以使用。
个人使用感受:可能是项目还不够大,所以感觉跟springboot-devtools差别不大,后来升级了IDEA后就没再用了。
四、调试小技巧
顺带说一下,鲜为人知的小技巧。
alt+鼠标左键点击在方法上可以重复调用方法。
此时如果修改了数据库数据,再次按下alt+鼠标左键,数据就会变,并且是实际执行了一次。
数据修改后的变化:
五、总结
个人最常用的是利用IDEA自带热加载,虽然有局限只能在已有的方法内才生效,但是好在够快!
怎么抉择?
新增接口或者明确需要添加很多新方法,以及需要时不时新建Mybatis的xml时,用springboot-devtools。
System.setProperty("spring.devtools.restart.enabled", "true");
其他小规模修改时,用IDEA自带热加载,把上面属性改成false即可。
有一说一,我的评价是不如前端的nodejs快,哈哈哈~~~~
精彩回顾
编程周记
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777