前言
小宅作为一个Java程序员,在日常的工作中,经常需要修改代码,然后重启服务,在验证代码是否生效。如果是小项目还好,重启速度比较快,等待时间比较短。但是随着项目逐渐变大,并且被拆分成多个服务时,改动一些代码,可能需要重启多个服务才能生效。这样下来就耗费了大量的时间在等待服务重启。
这样肯定是不行的,极大的影响了我的开发效率,那么是否有方式能够实现,修改完代码之后,能够不重启项目呢?
从Java1.4起,JVM引入了HotSwap,能够在Debug的时候更新类的字节码。所以使用热部署,可以实现修改代码后,无须重启服务就可以加载修改的代码,但是它只能用来更新方法体。作为神器的IDEA自然是支持这一技术的。
点击当前运行的服务,再点击Edit Configurations
。
点击要配置的程序,找到 On ‘Update’ action
和 On frame deactivation
选择 Update classes and resources
。点击OK就可以实现热部署了。
经过以上配置,在修改代码以后。只需要点击小锤子或者使用快捷键Command + F9
重新编译一下,就可以让改动的代码生效了。并且还会提示有多少个class被重新读取了。
虽然到这里已经能实现热部署的功能了。但是Java的虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。
由于热部署只支持修改方法体,所以类结构变更时会报错,并提示是否需要重启。
前面虽然通过配置IDEA实现了简单的热部署,但是有很明显的缺点,只能实现方法体的修改热部署。很明显无法满足日常的需求的,所以这个时候就需要使用DevTools来替代了。
DevTools是Spring为开发者提供了一个名为spring-boot-devtools
的模块,来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。使用起来非常简单,只需要将下面的依赖引入项目里面就可以了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<< · Back Index ·>>
《一》什么是DSD?这种格式有什么优缺点?DSD是Direct Stream Digital的缩写,是Sony与Philips推出SACD时所注册的商标。这种编 ...