spring-boot-devtools热部署-2(第五篇)

    spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是比速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为  restart ClassLoader,这样在有代码更改的时候,原来的restartClassLoader 被丢弃,重新创建一个restartClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)。

创建项目

通过idea创建一个项目名称为springboot-devtools的项目。


在pom.xml中添加相应的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.example.springboot</groupId>
   <artifactId>springboot-devtools</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>springboot-devtools</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.12.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.7</java.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
      <!-- devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中
      配置spring.thymeleaf.cache=false来实现), 实现类文件热部署(类文件修改后不会立即生效),
      实现对属性文件的热部署。  即devtools会监听classpath下的文件变动,
      并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的  -->
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
         <optional>true</optional>
         <scope>true</scope>
      </dependency>
   </dependencies>

</project>

添加启动插件

<build>
   <plugins>
   <!--   <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>-->
      <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
         <configuration>
            <!--如果没有fork配置,devtools不起作用,即项目修改后不会重新启动 -->
            <fork>true</fork>
         </configuration>
      </plugin>
   </plugins>
</build>


编写启动服务类

package com.example.springboot.devtools;

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

@SpringBootApplication
public class SpringbootDevtoolsApplication {

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

}


启动服务测试

1、选择启动类,右键选择Run或者选择菜单栏绿色小箭头启动服务。


启动服务后,修改代码,发现服务没有自动重启,这是什么原因呢?

还需要设置项目编译后自动重启服务,在代码中使用快捷键设置,Ctrl+Shift+Alt+/ ,出现如下界面:


选择Registry,弹出如下界面,勾选compiler.automake.allow.when.app.running


设置项目自动编译重启


以上修改完毕后,重启idea生效,然后启动测试如下:

修改代码: 服务重启

创建新类: 服务重启


猜你喜欢

转载自blog.csdn.net/seashouwang/article/details/80204283