linzheda的博客

尽最大的努力,做最坏的打算

springboot 在idea中使用热部署

springboot 在idea中使用热部署

       devtools:是spring boot的一个热部署工具,当修改了classpath下的文件(包括类文件、属性文件、页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现这个启动比较慢,可以选择使用jrebel)
双类加载器机制:boot使用了两个类加载器来实现重启(restart)机制:base类加载器+restart类加载器。
       base类加载器:用于加载不会改变的jar(第三方依赖的jar)

      restart类加载器:用于加载我们正在开发的jar(整个项目里我们自己编写的类)。当应用重启后,原先的restart类加载器被丢掉、重新new一个restart类加载器来加载这些修改过的东西,而base类加载器却不需要动一下。

1.在pom.xml文件中加入以下代码

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <optional>true</optional>
</dependency>
2.idea中File-》Settings-》Build,Execution,Deployment-》Compiler

勾选Build project automatically


3.按ctrl+alt+shift+/ 选择Registry 勾选


4. Chrome禁用缓存

  F12或者“Ctrl+Shift+I”,打开开发者工具,“Network” 选项卡下 选中打勾 “Disable Cache(while DevTools is open)”

不能使用分析:

(a)     对应的spring-boot版本是否正确;
(b)     是否加入spring-boot-maven-plugin,以及属性<fork>true</fork>
(c)      Eclipse Project 是否开启了Build Automatically
(d)     如果设置SpringApplication.setRegisterShutdownHook(false),则自动重启将不起作用。


补充:

     1、默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。

     2、如果想改变默认的设置,可以自己设置不重启的目录:spring.devtools.restart.exclude=static/**,public/**,这样的话,就只有这两个目录下的文件修改不会导致restart操作了。
     3、如果要在保留默认设置的基础上还要添加其他的排除目录:spring.devtools.restart.additional-exclude
     4、如果想要使得当非classpath下的文件发生变化时应用得以重启,使用:spring.devtools.restart.additional-paths,这样devtools就会将该目录列入了监听范围。


关闭自动重启

       设置 spring.devtools.restart.enabled 属性为false,可以关闭该特性。可以在application.properties中设置,也可以通过设置环境变量的方式。

System.setProperty("spring.devtools.restart.enabled","false");  
SpringApplication.run(MyApp.class, args); 


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35192224/article/details/79980761
个人分类: java
上一篇hadoop hdfs常用命令
下一篇oracle学习总结--oracle表分区
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭