SpringBoot热部署(SpringLoader与DevTools)

 

热部署方式一:SpringLoader

以maven插件方式使用SpringLoader
       SpringLoader缺点:只能对java代码生效,对html等页面代码不起作用
       注意:这种方式的缺点是SpringLoader热部署程序是在系统后台形式运行。
       这个时候需要手动关闭该进程,不然会抛出端口占用的异常

 

热部署方式二:使用DevTools

 使用DevTools工具,作为热部署


SpringLoader与DevTools的区别:

 

  1.    SpringLoader:在部署项目时使用的热部署方式。
  2.    DevTools:在部署项目时使用的是重新部署的方式。

 

由于SpringLoader部署有点麻烦,需要在单独启动,单独占用端口,有些麻烦。就只贴出代码就行。不做演示,主要讲解DevTools热部署。

使用DevTools热部署


   DevTools只需要加入DevTools依赖项,不需要做别的操作,会自动生效。
   java文件修改则自动重启项目,因为重新编译成class文件。
   html等页面文件修改则不会自动重启项目,因为不需要重新编译
 
   IDEA中如果加入devtools,但热部署并没有生效,有两个步骤
   1.需要在File-/Settings/Build,Execution,Deployent/Compiler/中勾选上Build project automatically选项
   2.同时按Shift+Ctrl+Alt+/   勾选上compiler.automake.allow.when.app.running选项
   这样就devtools就会生效了

 

一:DevTools

pom.xml依赖包

<dependencies>
        <!-- springBoot的启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- thymeleaf的启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- DevTools热部署依赖包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <!-- optional作用:当其它项目使用该项目是,依赖包加入optional为true,则不会向下传递该依赖包 -->
            <!--<optional>true</optional>-->
        </dependency>
    </dependencies>

application.yml配置文件

spring:
  devtools:
    restart:
      #热部署设置为true:生效,false:失效。默认是true
      enabled: true
      #选择热部署需要重启的目录
      additional-paths: src/main/java
      #选择热部署中修改文件内容不修改重启的目录或文件
      #exclude: templates/**
  thymeleaf:
    #页面模板是否缓存,false:不缓存,则热部署对页面生效。true:缓存,则热部署对页面不生效
    cache: false

测试页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <span th:text="hello...init"></span>
</body>
</html>

Controller

package com.kevin.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author kevin
 * @version 1.0
 * @description     测试热部署
 * @createDate 2019/3/20
 */
@Controller
public class UsersController {

    @RequestMapping("/show")
    public String showPage(){
        System.out.println("showPage...init...");
        return "index";
    }

}

启动类

package com.kevin;

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

/**
 * @author kevin
 * @version 1.0
 * @description     热部署方式二:使用DevTools
 *      使用DevTools工具,作为热部署
 *  SpringLoader与DevTools的区别:
 *      SpringLoader:在部署项目时使用的热部署方式。
 *      DevTools:在部署项目时使用的是重新部署的方式。
 *
 *  DevTools只需要加入DevTools依赖项,不需要做别的操作,会自动生效。
 *  java文件修改则自动重启项目,因为重新编译成class文件。
 *  html等页面文件修改则不会自动重启项目,因为不需要重新编译
 *
 *  IDEA中如果加入devtools,但热部署并没有生效,有两个步骤
 *  1.需要在File-/Settings/Build,Execution,Deployent/Compiler/中勾选上Build project automatically选项
 *  2.同时按Shift+Ctrl+Alt+/   勾选上compiler.automake.allow.when.app.running选项
 *  这样就devtools就会生效了
 *
 * @createDate 2019/3/20
 */
@SpringBootApplication
public class DevToolsApplication {

    public static void main(String[] args) {
        SpringApplication.run(DevToolsApplication.class,args);
    }
}

测试,仅仅访问

Spring Boot---(13)SpringBoot热部署(SpringLoader与DevTools)

测试修改页面

Spring Boot---(13)SpringBoot热部署(SpringLoader与DevTools)

测试修改后台代码,代码修改就自动重启了程序

Spring Boot---(13)SpringBoot热部署(SpringLoader与DevTools)

Spring Boot---(13)SpringBoot热部署(SpringLoader与DevTools)

二:SpringLoader

pom.xml,springloader插件,以maven插件的形式进行热部署

<dependencies>
        <!-- springBoot的启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- thymeleaf的启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        
    </dependencies>

    <!-- springloader插件,以maven插件的形式进行热部署-->
    <!-- 想要让这个热部署插件生效,需要使用maven的命令启动命令为:mvn spring-boot:run -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.8.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

测试页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <span th:text="hello...init"></span>
</body>
</html>

Controller

package com.kevin.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author kevin
 * @version 1.0
 * @description     测试热部署
 * @createDate 2019/3/20
 */
@Controller
public class UsersController {

    @RequestMapping("/show")
    public String showPage(){
        System.out.println("showPage...init...");
        return "index";
    }

}

启动类

package com.kevin;

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

/**
 * @author kevin
 * @version 1.0
 * @description     热部署方式一:SpringLoader
 *          以maven插件方式使用SpringLoader
 *      SpringLoader缺点:只能对java代码生效,对html等页面代码不起作用
 *      注意:这种方式的缺点是SpringLoader热部署程序是在系统后台形式运行。
 *      这个时候需要手动关闭该进程,不然会抛出端口占用的异常
 * @createDate 2019/3/20
 */
@SpringBootApplication
public class SpringLoaderApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringLoaderApplication.class,args);
    }
}

 

相关文章: