SpringBoot热部署配置(基于Maven)

热部署的意思是只要类中的代码被修改了,就能实时生效,而不用重启项目。spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是比速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。

其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader
,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)。

 

下面基于maven实现SpringBoot的热部署解决方案:

(1)在pom.xml文件中引入 spring-boot-devtools 依赖

<!-- SpringBoot 热部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <!-- 不传递依赖 -->
    <optional>true</optional>
</dependency>

(2)开启IntelliJ IDEA的自动编译(这里使用的IDEA版本是14.1.7)

(3)打开命令行窗口,使用"mvn spring-boot:run"命令的方式来启动SpringBoot项目(经测试,如果通过直接运行SpringBoot的Main方法来启动项目的话,devtools是不会生效的):

 

配置完毕,只要java类中的代码被修改了,通过控制台上的日志信息可以看到项目会自动重启,以使修改的文件实时生效。

如果不想使用热部署了,可以通过配置来关闭热部署,比如:

package com.xuebusi.springboot.maven;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 启动类
 * Created by xuebusi.com on 2017/4/13.
 */
@SpringBootApplication
public class MavenApplication {

    public static void main(String[] args) {
        //热部署开关:true表示开启,false表示关闭
        System.setProperty("spring.devtools.restart.enabled","false");
        SpringApplication.run(MavenApplication.class, args);
    }
}

上面是在main方法中传递配置参数,当然也可以把spring.devtools.restart.enabled属性配置在项目的properties配置文件或者yml配置文件中,比如:

 

参考的文章:

http://412887952-qq-com.iteye.com/blog/2300313

 

posted @ 2017-12-20 16:26  xuebusi  阅读(2893)  评论(0编辑  收藏  举报