spring-boot 热部署の spring-boot-devtools

因为sprig boot的启动方式是通过mian()方法来启动的。所以在做开发的时候,经常改动个小小的地方就要重新启动项目,这个有点不是很舒服。于是浏览了一些文章大概总结了三种:
方式1.Spring Loaded
方式2.spring-boot-devtools
方式3.JRebel插件(之前有用过)

这篇文章主要是我自己用spring-boot-devtools的小记:
其原理大概看了一下网上是说:
  spring-boot-devtools使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)。

具体实现:

1.maven项目的pom.xml中添加依赖

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

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
            </configuration>
    </plugin>

2.在application.properties中配置:

#添加那个目录的文件需要restart
spring.devtools.restart.additional-paths=./src/main/java
#排除那个目录的文件不需要restart
spring.devtools.restart.exclude=static/**,public/**

我是用的yml的配置方式,所以如下:

spring:
  devtools:
    restart:
      additional-paths: ./src/main/java  #这里路径一定要对,我前面加了一个 ./ 根目录取路径的方式,因为第一次直接使用了相对路径启动就报错了
      exclude: static/**                 

3.创建一个controller类,当你修改了代码的之后可以看到控制台项目快速重启的日志,加载及时生效。

参考:

Spring Boot 热部署 IDEA配置

Spring Boot 2.0 热部署指南

猜你喜欢

转载自blog.csdn.net/yujq1993/article/details/79895922