SpringBoot热部署

一、需求背景

在IntelliJ IDEA 2017+版本中开发SpringBoot项目,在没有热部署的情况下,效率极低,要不停的stop/run,stop/debug,迫切需要热部署

二、参考资料,建议大家都看一下

A:非常有用的issues : https://youtrack.jetbrains.com/issue/IDEA-141638#u=1474048879057&tab=Linked%20Issues 点击打开链接;该issues记录了网上搜索后的答案相同的主要步骤,这个比较官方。

B:SpringBoot文档 :  https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#howto-hotswapping 点击打开链接

三、经实践后的总结

在Idea中实现spring boot热部署的过程中,走了许多弯路,尝试了许多教程,现对所有实践过的热部署做一个总结。

个人总结为一下几种方式实现热部署

1.将springboot打包为war包,新建tomcat,将其deployment为exploded,设置on update action,on frame deactivation属性为update classes and resources。这种是tomcat部署war包的方式,支持idea失去焦点自动make/build project,实现热部署,前提是打成war包,也是传统的web项目部署方式,spring boot也支持,但更多的仍然是jar形式运行,特别是开发阶段

2.jar包形式热部署。

 spring boot内置了tomcat容器,本身的jar包便是可执行程序,为了让java -jar可以正常运行这样一个内部相对复杂的jar程序(jar中嵌套jar),springboot本身对jar进行了定制化处理:借助spring-loader作为程序的JarLauncher,重新定制了jar包的启动方式,jar包的组织目录,与普通jar包区别在于BOOT-INF还有外置的loader,大家用压缩文件打开并对比传统jar包即可发现。加载jar包分为provide lib和lib。

 讲了上面这些废话,主要是想说明一点,springboot的jar包与普通jar包不同,是经过springloaded处理过的,官网推荐使用spring-boot-devtools也是有依据的。

借助该种方式实现热部署有以下几个步骤。

首先添加依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-loader</artifactId>
</dependency>
其次添加插件支持

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
	<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>springloaded</artifactId>
	<version>1.2.6.RELEASE</version>
</dependency>
</dependencies></plugin>
这时,当项目重新build/make的时候,项目就会重新启动,注意,是重新启动,当然,重新启动后,代码就生效了。

在这基础上,有了参考资料issues上的做法,这种做法可以在文件修改后,idea自动make/Build,然后项目重新启动。。。

网上的这些教程,基本上实践后的结果都是项目重新启动的热部署,这并不是我们想要的。

我们想要的效果是,不重启项目,代码生效。

因此,不需要像issues那样操作,我们只需要在application.properties里加上

spring.devtools.restart.enabled=false

最终的结果是,当我们手动build项目(ctrl + f9)或者是build file(ctrl + shift + f9),又或者是使用tool window里面的build。

当动作执行并且完成,代码已经实时生效。

这里又要说下eclipse和intelliJ idea的区别,eclipse是手动保存,自动编译,idea是自动保存,手动编译。因为build的动作

会导致整个项目编译,所以你看到Build project automactically后面有个括号,只有项目不在运行中方可自动build。

四、总结

最终合适我的做法是设置restart为false,单个文件修改后ctrl + shift + f9 单独编译文件,代码生效。

由于intelliJ idea的一个特性是自动保存,所以我们可以把rebuild的快捷键设为ctrl +s ,而原来的ctrl +s的快捷键实际上是

save All,无关紧要,修改它。

这时,我们只要按照传统的操作习惯ctrl + s即可实现热部署。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值