IDEA开发利用Spring-boot-devTools实现热部署

之前的文章里写过idea下的热部署插件JRebel,其实在开发springboot的时候还有很多,今天再分享另一种方式spring自带的工具devtools。接下来就来看看这个怎么实现热部署。

1、首先在pom.xml文件里添加依赖。这个optional设置为true,表示当前项目依赖devtools,而依赖当前项目的项目如果项目使用devtools,需要重新添加,这个依赖关系不能传导。

  • 当我们再次启动的时候,使用的加载器就变为了 restartedMain 了,说明热部署已经成功。

2、属性文件application.properties添加devtools配置,spring.devtools.restart.enabled表示的就是该热部署工具是否生效,spring.devtools.restart.additional-paths表示监控的目录,只有这个目录下的class发生改变,项目才会重启,最后一个更新不重启,一般配置的都是页面文件目录(

  • 某些资源在更改时不一定需要触发重新启动。例如, Thymeleaf 模板可以就地进行编辑。默认情况下更改资源路径包括了:/META-INF/maven/META-INF/resources ,/resources ,/static ,/public 或者 /templates 不会触发重新启动, 但会触发实时重新加载。如果逆向排除这些路径,可以使用如下配置:spring.devtools.restart.exclude=static/**,public/**

)。

3、配置好以后,就可以写个例子验证一下热部署是否生效了 。

4、这个是修改前的返回值,修改controller里的参数后,发现项目确实重启了,但是修改项并没有生效,热部署时并没有把修改的class类给加载上。怀疑是自己idea没有编译类文件。红框范围里要打勾。

仍然没有生效,第二处检查Shift+Ctrl+Alt+/,弹窗选择Registry项,红框打勾。

再重启再修改,哈哈可以了,杰克马666出来啦!

5、devtools的重启速度快,这个和其原理是有关系的,它监听了路径下的文件变动,重启的时候只是加载有变动的class,不重新加载第三方的jar包。如果有三方包的变化还是要手动重启加载的。

  • 由于spring-boot-devtools采用的双类加载器机制:base类加载器(base ClassLoader), restart类加载器(restart ClassLoader),重启过程会比较快
    • base ClassLoader:用于加载不会改变的jar(eg.第三方依赖的jar)
    • restart ClassLoader:用于加载我们正在开发的jar(eg.整个项目里我们自己编写的类)。当应用重启后,原先的restart ClassLoader被丢掉、重新new一个restart ClassLoader来加载这些修改过的东西,而base ClassLoader却不需要动一下。这就是devtools重启速度快的原因。

6、增加触发器文件触发重启

如果每个java源代码,随便改点东西,就频繁自动编译、重新加载,开销很大,此时可以加入触发器文件,Devtools 检测到触发器文件变更时才会触发重启检查。

  • 通过spring.devtools.restart.trigger-file配7置触发器文件路径

 

7.自定义重启类加载器

如上所述,重启功能是通过使用两个类加载器实现的。 对于大多数应用程序,此方法运行良好,但有时可能会导致类加载问题。

默认情况下,IDE中的任何打开的项目都会使用“restart”类加载器加载,任何常规.jar文件将使用“base”类加载器加载。 如果你在多模块项目上工作,但不是每个模块都导入到IDE中,则可能需要自定义配置。 为此,你可以创建一个META-INF/spring-devtools.properties文件。

spring-devtools.properties文件可以包含restart.exclude. 和restart.include. 前缀的属性。 include元素是应该被放入“restart”类加载器的项目, exclude元素是应该放入“base”类加载器的项目。 属性的值是应用于类路径下的正则表达式。

 
  1. restart.exclude.companycommonlibs=/mycorp-common-[\\w-]+\.jar

  2. restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值