SpringBoot的热部署

在SpringBoot中启用热部署是非常简单的一件事,因为SpringBoot为我们提供了一个非常方便的工具spring-boot-devtools,我们只需要把这个工具引入到工程里就OK了,下面我就说一下怎么引入spring-boot-devtools。

修改pom.xml

我们只需要在pom.xml里,引入相应的jar包就行了。
[java]  view plain  copy
  1. <dependency>  
  2.     <groupId>org.springframework.boot</groupId>  
  3.     <artifactId>spring-boot-devtools</artifactId>  
  4.     <optional>true</optional><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->  
  5. </dependency>  

重新编译类文件

当我们修改了一个java类的时候,我们只需要重新编译一下,SpringBoot的就会重启了。因为devtools会监听classpath下的文件变动,所以当java类重新编译的时候,devtools会监听到这个变化,然后就会重新启动SpringBoot。这个重启是非常快的一个过程。因为在SpringBoot中有两个类加载器,一个是加载工程外部资源的,如jar包,还有一个类加载器是用来加载本工程的class的。所以在重启SpringBoot的时候只加载本工程的class文件。

监听文件夹的变化

如果你不想重新编译java类的话,还有一种方式用来让SpringBoot重启,那就是让devtools监听文件夹的变化:比如我们想让com.zkn.learnspringboot这个文件夹下的文件改变的时候,重新启动SpringBoot,那么我们只要在application.properties中添加这样一句话就行了:spring.devtools.restart.additional-paths=com\\zkn\\learnspringboot。

页面热部署

devtools可以实现页面热部署即页面修改后会立即生效。你可以在 application.properties文件中配置spring.thymeleaf.cache=false来实现这个功能。






前言

JRebel是JavaEE中比较流行的热部署插件,可快速实现热部署,节省了大量重启时间,提高了个人开发效率。看一张图就知道了:这里写图片描述 
我这里提到JRebel的目的主要是说明热部署工具带来的优势:节省时间,提高开发效率 
下面我将介绍使用maven构建的SpringBoot项目中实现热部署的两种方式,使得部署变得异常简单,同时两种方式也非常的简单。

热部署

devtools

Pom.xml中直接添加依赖即可:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>provided</scope>
      <!--optional我没弄明白,都说必须为true,但我测试true,false,不加都可以-->
      <optional>true</optional>
    </dependency>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通过项目主程序入口启动即可,改动以后重新编译就好。

springloaded

Pom.xml中直接在spring-boot插件中添加依赖即可:

<plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <dependencies>
            <!-- spring热部署 -->
            <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>springloaded</artifactId>
              <version>1.2.6.RELEASE</version>
            </dependency>
          </dependencies>
          <configuration>
            <mainClass>cn.springboot.Mainspringboot</mainClass>
          </configuration>
        </plugin>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行:

$ mvn clean spring-boot:run
   
   
  • 1
  • 1

改动后,编译即可实现热部署

结束语

这两种方式其实都是spring官网为了spring项目所推出的jar包,加之springBoot框架内嵌服务器的优势,使得改动后的项目部署变得非常简单;当我使用以后这两种方法以后,发现真正实现热部署的只是后者,前者只是实现了热启动而已,从控制台日志就可以看出来。

说明
  • 项目使用maven管理,不然这篇简单实用的文章不适合你
  • 第一种方式配置文件改动后不能触发热启动
  • 第二种方式配置文件改动后不能触发热部署,会提示一下错误
2017-05-24 11:54:53.276 ERROR 12063 --- [Loader@18b4aac2] org.springsource.loaded.ReloadableType   : Unable to find regeneration methods for cglib proxies - proxies will be out of date for this type
   
   
  • 1
  • 1
  • 由于使用IDE的不同,编译快捷键也可能不同,笔者实用intellij idea ,对应快捷键 Ctrl+Shift+F9,也可以设置自动编译(见这篇文章),eclipse 没记错的话是默认自动编译

参考文章









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值