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

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

创建项目

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

spring-boot-devtools热部署-2(第五篇)_第1张图片

在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.0modelVersion>

   <groupId>com.example.springbootgroupId>
   <artifactId>springboot-devtoolsartifactId>
   <version>0.0.1-SNAPSHOTversion>
   <packaging>jarpackaging>

   <name>springboot-devtoolsname>
   <description>Demo project for Spring Bootdescription>

   <parent>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-parentartifactId>
      <version>1.5.12.RELEASEversion>
      <relativePath/> 
   parent>

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

   <dependencies>
      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-webartifactId>
      dependency>
      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-testartifactId>
         <scope>testscope>
      dependency>
      
      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-devtoolsartifactId>
         <optional>trueoptional>
         <scope>truescope>
      dependency>
   dependencies>

project>

添加启动插件

<build>
   <plugins>
   
      <plugin>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-maven-pluginartifactId>
         <configuration>
            
            <fork>truefork>
         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或者选择菜单栏绿色小箭头启动服务。

spring-boot-devtools热部署-2(第五篇)_第2张图片

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

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

spring-boot-devtools热部署-2(第五篇)_第3张图片

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

spring-boot-devtools热部署-2(第五篇)_第4张图片

设置项目自动编译重启

spring-boot-devtools热部署-2(第五篇)_第5张图片

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

修改代码: 服务重启

创建新类: 服务重启


你可能感兴趣的:(springboot,spring-boot开发教程)