spring boot assistant插件问题 spring-boot-loader-tools

admin2024-06-04  15

目录

1.使用 SpringLoader 进行项目的热部署

1.1方式一: 以 maven 插件方式使用 SpringLoader

1.1.1 在 pom 文件中添加插件配置

1.1.2 使用 maven 的命令起来启动spring-boot:run

1.2方式二:在项目中直接使用 jar 包的方式

1.2.1添加 springloader 的 jar 包

1.2.2启动方式

2. DevTools 工具

2.1 简介

2.1.1 属性默认值

2.1.2 自动重启

2.1.3 LiveReload(自动刷新)

2.1.4 远程调试隧道

2.1.5 远程更新和重启

2.2 使用触发文件

2.3 SpringLoader 与 DevTools 的区别

2.4 修改项目的 pom 文件添加 devtools 的依赖


1.使用 SpringLoader 进行项目的热部署

1.1方式一: 以 maven 插件方式使用 SpringLoader

1.1.1 在 pom 文件中添加插件配置

<!-- springloader 插件 -->
<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.6.RELEASE</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

1.1.2 使用 maven 的命令起来启动
spring-boot:run

注意:必须以这种方法来启动,才会让maven插件里面的springLoader插件发挥作用,如果还是按照传统的main方法启动的话,会跳过插件而不会是热部署生效

spring boot assistant插件问题 spring-boot-loader-tools,spring boot assistant插件问题 spring-boot-loader-tools_spring,第1张

SpringLoader 缺陷: 就是 对Java 代码做部署处理。 但是对页面无能为力
注意: 这种方式的缺点是 Springloader 热部署程序是在系统后台以进程的形式来运行。 需要手动关闭该进程

如下图:

spring boot assistant插件问题 spring-boot-loader-tools,spring boot assistant插件问题 spring-boot-loader-tools_spring_02,第2张

1.2方式二:在项目中直接使用 jar 包的方式

1.2.1添加 springloader 的 jar 包

spring boot assistant插件问题 spring-boot-loader-tools,spring boot assistant插件问题 spring-boot-loader-tools_maven_03,第3张

1.2.2启动方式

spring boot assistant插件问题 spring-boot-loader-tools,spring boot assistant插件问题 spring-boot-loader-tools_应用程序_04,第4张

spring boot assistant插件问题 spring-boot-loader-tools,spring boot assistant插件问题 spring-boot-loader-tools_应用程序_05,第5张

启动命令:(就是在查找springload的jar包)

-javaagent:.\lib\springloaded-1.2.6.RELEASE.jar -noverify

2. DevTools 工具

2.1 简介

Spring Boot DevTools 是 Spring Boot 1.3 提供的另一个模块。DevTools 代表开发者工具。该模块的目标是在使用 Spring Boot 应用程序时改进开发时间。Spring Boot DevTools 可以检测到代码变化并自动重启应用程序。

Spring Boot DevTools 提供以下特性

2.1.1 属性默认值

Spring Boot 提供了模板技术 Thymeleaf,其中包含属性 spring.thymeleaf.cache。它禁用了缓存,允许我们在不需要重启应用程序的情况下更新页面。但是在开发过程中设置这些属性总是会导致一些问题
当我们使用 spring-boot-devtools 模块时,无需设置这些属性。在开发期间,自动禁用了 Thymeleaf、Freemarker、Groovy Templates 的缓存
注意:如果不想在应用程序中应用属性默认值,可以在 application.properties 文件中将 configprop:spring.devtools.add-properties[] 设置为 false

2.1.2 自动重启

自动重启是指重新加载 Java 类并在服务器端配置它。在服务器端发生更改后,动态部署并重新启动加载修改后的代码。它在大多数基于微服务的应用程序中使用。

Spring Boot 使用两种类型的类加载器:

  • 不会发生更改的类(第三方 Jar)在基本类加载器中加载。
  • 我们正在积极开发的类在重启类加载器中加载

当应用程序重新启动时,重新启动类加载器被丢弃,然后填充新的类加载器。因此,基本类加载器始终可用且填充,我们可以通过使用属性 spring.devtools.restart.enabled 设置为 false

记住:

  • DevTools 始终监视类路径资源。
  • 触发重新启动的唯一方式是更新类路径。
  • DevTools 需要一个单独的应用程序类加载器来正常工作。默认情况下,Maven fork 应用程序进程。
  • 自动重启与 LiveReload 配合使用效果很好。
  • DevTools 依赖于应用程序上下文的关闭钩子,以便在重新启动期间关闭它

2.1.3 LiveReload(自动刷新)

Spring Boot DevTools 模块包含一个名为 LiveReload

注意:我们可以通过将属性 spring.devtools.livereload.enabled 设置为 false

LiveReload为 Chrome、Firefox 和 Safari 提供浏览器扩展。默认情况下,LiveReload 是启用的。LiveReload 适用于以下路径:/META-INF/maven,/META-INF/resources,/resources,/static,/public,/templates

我们也可以通过排除上述路径来禁用浏览器的自动刷新。例如:
spring.devtools.restart.exclude=public/**, static/**, templates/**

我们可以使用属性 spring.devtools.restart.additional-paths 来查看其他附加路径。例如:
spring.devtools.restart.additional-paths=/path-to-folder

如果想要排除其他附加路径并保持默认设置,则使用属性

spring.devtools.restart.additional-exclude。例如:spring.devtools.restart.additional-exclude=styles/**  

记住:

  • 一次只能运行一个 LiveReload 服务器。
  • 在启动应用程序之前,请确保没有其他 LiveReload 服务器正在运行。
  • 如果从 IDE 启动多个应用程序,则只支持第一个 LiveReload。

2.1.4 远程调试隧道

Spring Boot 可以将 JDWP(Java Debug Wire Protocol)隧道直接通过 HTTP 隧道传递给应用程序。它甚至可以在应用程序部署到只公开端口 80 和 443 的云提供商时运行。

2.1.5 远程更新和重启

DevTools 提供的另一个技巧是支持远程应用程序更新和重启。它监视本地类路径的文件更改并将它们推送到远程服务器,然后重新启动该服务器。我们还可以将此功能与 LiveReload 结合使用

2.2 使用触发文件

自动重启有时会由于频繁重启而减慢开发时间。为了解决这个问题,我们可以使用触发文件。Spring Boot 监视触发文件并检测其中的修改。它重新启动服务器并重新加载所有以前的更改。

我们可以通过添加属性 spring.devtools.restart.trigger-file

例如:

spring.devtools.restart.trigger-file=c:/workspace-sts-3.9.9.RELEASE/restart-trigger.txt

2.3 SpringLoader 与 DevTools 的区别

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

2.4 修改项目的 pom 文件添加 devtools 的依赖

<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>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
</parent>
    <groupId>com.bjsxt</groupId>
    <artifactId>21-spring-boot-devtools</artifactId>
    <version>0.0.1-SNAPSHOT</version>

<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>true</optional>
    </dependency>
</dependencies>
</project>

注意:maven里面的可选依赖<optional> true/false 是否可选,防止将devtools依赖传递到其他模块中。在依赖中添加optional选项决定此依赖是否向下传递,如果是true则不传递,如果是false就传递,默认为false。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!