咱们以前在在(3)Spring Boot热部署【从零开始学Spring Boot】 java
(http://412887952-qq-com.iteye.com/blog/2291518 )讲过经过使用springloadedspring
进行热部署,可是有部分代码修改了,并不会进行部署。今天咱们介绍的这个经过重启的机制就能够解决这个问题了。sql
咱们今天要介绍的就是:spring-boot-devtools。数据库
spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改以后,从新启动应用,可是比速度比手动中止后再启动还要更快,更快指的不是节省出来的手工操做的时间。浏览器
其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另外一个ClassLoader加载会更改的类,称为 restart ClassLoader缓存
,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,从新建立一个restart ClassLoader,因为须要加载的类相比较少,因此实现了较快的重启时间(5秒之内)。springboot
那如何使用呢,大概两个步骤便可:restful
第一就是添加相应的依赖:app
<!--eclipse
devtools能够实现页面热部署(即页面修改后会当即生效,这个能够直接在application.properties文件中配置spring.thymeleaf.cache=false来实现),
实现类文件热部署(类文件修改后不会当即生效),实现对属性文件的热部署。
即devtools会监听classpath下的文件变更,而且会当即重启应用(发生在保存时机),注意:由于其采用的虚拟机机制,该项重启是很快的
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
第二加点:仅仅加入devtools在咱们的eclipse中还不起做用,这时候还须要添加的spring-boot-maven-plugin:
<build>
<plugins>
<!--
用于将应用打成可直接运行的jar(该jar就是用于生产环境中的jar) 值得注意的是,若是没有引用spring-boot-starter-parent作parent,
且采用了上述的第二种方式,这里也要作出相应的改动
-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 若是没有该项配置,肯呢个devtools不会起做用,即应用不会restart -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
运行App.java ---- Run Application --- Java Application便可进行测试。
测试方法:
· 修改类-->保存:应用会重启
· 修改配置文件-->保存:应用会重启
· 修改页面-->保存:应用会重启,页面会刷新(原理是将spring.thymeleaf.cache设为false)
不能使用分析:
(a) 对应的spring-boot版本是否正确,我这里使用的是1.3.3版本;
(b) 是否加入plugin了,以及属性<fork>true</fork>
(c) Eclipse Project 是否开启了Build Automatically(我本身就在这里栽了坑,不知道为何个人工具何时关闭了自动编译的功能)。
(d) 若是设置SpringApplication.setRegisterShutdownHook(false)
,则自动重启将不起做用。
补充:
默认状况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,可是会从新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。
· 若是想改变默认的设置,能够本身设置不重启的目录:spring.devtools.restart.exclude=static/**,public/**,这样的话,就只有这两个目录下的文件修改不会致使restart操做了。
· 若是要在保留默认设置的基础上还要添加其余的排除目录:spring.devtools.restart.additional-exclude
· 若是想要使得当非classpath下的文件发生变化时应用得以重启,使用:spring.devtools.restart.additional-paths,这样devtools就会将该目录列入了监听范围。
关闭自动重启
设置 spring.devtools.restart.enabled 属性为false,能够关闭该特性。能够在application.properties中设置,也能够经过设置环境变量的方式。
publicstaticvoidmain(String[] args){
System.setProperty("spring.devtools.restart.enabled","false");
SpringApplication.run(MyApp.class, args);
【Spring Boot 系列博客】
58. Spring Boot国际化(i18n)【从零开始学Spring Boot】
57. Spring 自定义properties升级篇【从零开始学Spring Boot】
56. spring boot中使用@Async实现异步调用【从零开始学Spring Boot】
55. spring boot 服务配置和部署【从零开始学Spring Boot】
54. spring boot日志升级篇—logback【从零开始学Spring Boot】
52. spring boot日志升级篇—log4j多环境不一样日志级别的控制【从零开始学Spring Boot】
51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】
49. spring boot日志升级篇—理论【从零开始学Spring Boot】
48. spring boot单元测试restfull API【从零开始学Spring Boot】
47. Spring Boot发送邮件【从零开始学Spring Boot】
46. Spring Boot中使用AOP统一处理Web请求日志
45. Spring Boot MyBatis链接Mysql数据库【从零开始学Spring Boot】
44. Spring Boot日志记录SLF4J【从零开始学Spring Boot】
43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
42. Spring Boot多数据源【从零开始学Spring Boot】
41. Spring Boot 使用Java代码建立Bean并注册到Spring中【从零开始学Spring Boot】
40. springboot + devtools(热部署)【从零开始学Spring Boot】
39.4 Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.2. Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】
38 Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】
37 Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】
36 Spring Boot Cache理论篇【从零开始学Spring Boot】
35 Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】
34Spring Boot的启动器Starter详解【从零开始学Spring Boot】
33 Spring Boot 监控和管理生产环境【从零开始学Spring Boot】
32 Spring Boot使用@SpringBootApplication注解【从零开始学Spring Boot】
31 Spring Boot导入XML配置【从零开始学Spring Boot】