开发项目的时候,如果项目较大,稍微改个东西就要重启,那也太影响心情了。

主要有三种方式:

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注