标签: spring-boot-devtools

Spring Boot Devtools 无法使用 Gradle 工作

我使用 IntelliJ 创建了一个简单的 Spring Boot 应用程序,该应用程序使用 Spring Boot Devtools 作为依赖项,使用 Gradle 作为构建自动化选项:Use default gradle wrapper. 但是,Devtools 似乎不起作用。当我更改我的 html 文件时,即使我多次刷新页面也不会更新。我使用Spring Boot Devtools 文档作为参考。

我的application.properties是空的

这是我的build.gradle

buildscript {
ext {
    springBootVersion = '2.0.5.RELEASE'
}
repositories {
    mavenCentral()
}
dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
} …
Run Code Online (Sandbox Code Playgroud)

java gradle maven spring-boot spring-boot-devtools

6
推荐指数
0
解决办法
1166
查看次数

java.lang.ClassCastException:类...位于加载程序“app”的未命名模块中 - spring-boot-dev-tools

我们有一个更大的 Spring boot 应用程序,它会导致以下异常:

    java.lang.ClassCastException: class jpa.XVersion cannot be cast to class jpa.XVersion (jpa.XVersion is in unnamed module of loader 'app'; jpa.XVersion is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @671ef14f)
    at y.package.abc(XService.java:70)
    at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:75)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Run Code Online (Sandbox Code Playgroud)

同时从 IDEA IntelliJ 内部与 JPA 类的关系开始。

从普通命令行启动时,该应用程序运行良好。

当我们删除依赖之后

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <optional>true</optional>
</dependency>
Run Code Online (Sandbox Code Playgroud)

IDE 中的执行工作正常,没有任何问题。

我们正在使用:

  • IntelliJ理念2020.1.2
  • Spring引导版本2.3.1,
  • JDK 11.0.7(采用开放JDK),
  • 阿帕奇Maven 3.6.3

有人已经观察到这类问题了吗?是否存在不同的解决方案然后删除依赖项?

java intellij-idea spring-boot spring-boot-devtools

6
推荐指数
1
解决办法
3万
查看次数

spring-boot-devtools 自动重启不起作用

我有一个使用 mvn 构建的有效 Spring Boot 2.25 应用程序。根据此文档,我添加

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

从文档:

由于 DevTools 监控类路径资源,触发重启的唯一方法是更新类路径。更新类路径的方式取决于您使用的 IDE。在 Eclipse 中,保存修改后的文件会导致更新类路径并触发重新启动。在 IntelliJ IDEA 中,构建项目(Build -> Build Project)具有相同的效果。

随着应用程序的运行,我尝试了一个简单的

touch /path/to/app.jar
Run Code Online (Sandbox Code Playgroud)

期待应用程序重新启动,但什么也没发生。

好吧,也许它正在做一些更聪明的事情。我修改了一些源 .java,重新编译了 .jar,然后用cp它来替换正在运行的 .jar 文件,然后……什么也没发生。

也来自文档

DevTools 依靠应用程序上下文的关闭挂钩在重新启动期间关闭它。如果您禁用了关闭钩子 (SpringApplication.setRegisterShutdownHook(false)),它就不能正常工作。

我不是在做这个。

DevTools 需要自定义ApplicationContext 使用的ResourceLoader。如果您的应用程序已经提供了一个,它将被包装。不支持直接覆盖 ApplicationContext 上的 getResource 方法。

我不是在做这个。

如果这很重要,我正在 Docker 容器中运行它。从文档:

运行完全打包的应用程序时,开发人员工具会自动禁用。如果您的应用程序是从 java -jar 启动的,或者是从特殊的类加载器启动的,则它被视为“生产应用程序”。如果这不适用于您(即,如果您从容器运行您的应用程序),请考虑排除 devtools 或设置 -Dspring.devtools.restart.enabled=false 系统属性。

我不明白这意味着什么,或者它是否相关。

我想重新编译一个 .jar 并在正在运行的 docker 容器中替换它,并在不重新启动容器的情况下触发和应用程序重新启动。我怎样才能做到这一点?

编辑:我正在使用mvn重建 jar,然后docker cp在正在运行的容器中替换它。(IntelliJ IDEA 声称要重建项目,但实际上并未 …

java docker spring-boot spring-boot-devtools

6
推荐指数
2
解决办法
729
查看次数

如何在保存文件中的更改后自动重新启动Dropwizard应用程序

在春季启动每当文件在classpath改变,应用程序中使用弹簧引导devtools将导致应用程序重新启动.有些也可以使用JRebel实现,但JRebel不是免费的.

我在dropwizard中寻找相同的功能.Springboot中是否有任何免费工具或任何类似devtools的库可以在dropwizard中实现?

java jrebel dropwizard spring-boot-devtools

5
推荐指数
1
解决办法
203
查看次数

thymeleaf 模板的实时重新加载

当我更改 /templates 中的 thymeleaf .html 文件时,我希望浏览器自动重新加载页面。我安装了实时重新加载插件,它能够与 Spring Boot 服务器握手。但是,在更改 thymeleaf 模板文件时,我必须手动重新加载浏览器。任何我可能缺少的建议。显然我已经spring-boot-devtools启用并手动更新了属性devtools.livereload.enabled = true。并且 spring devtools 正确地反映了对构建目标中任何模板或控制器的更改,并且通过手动重新加载浏览器,我看到了更改。

根据 spring 文档。

某些资源在更改时不一定需要触发重新启动。例如,可以就地编辑 Thymeleaf 模板。默认情况下,更改 /META-INF/maven、/META-INF/resources、/resources、/static、/public 或 /templates 中的资源不会触发重新启动,但会触发实时重新加载

我让我的本地运行在损坏的 https 上。(某些证书问题,这会导致not securechrome 地址栏中出现一条消息。这可能是实时重新加载不起作用的原因。

spring thymeleaf livereload spring-boot-devtools spring-boot-2

5
推荐指数
3
解决办法
5181
查看次数

Intelijj IDEA springboot devtools

我使用 Springboot 创建我的应用程序,所以在 Springboot Doc 中说如果我使用 devtools,tomcat 将重新启动我的代码中的所有更改,但是我使用 maven 面板来运行我的应用程序只需双击 spring-boot:run 插件,但是当我更改了我的 tomcat 不会重新启动的任何代码。

我怎样才能解决这个问题?tks

intellij-idea spring-boot spring-boot-devtools

4
推荐指数
1
解决办法
5667
查看次数

Spring Boot应用程序无法运行-spring.resources.cache-period未绑定

我不愿意运行的Spring Boot应用程序遇到问题。

根据日志,这种情况的原因是未绑定的spring.resources.cache-period属性。但是,此属性在application.properties中设置,并且编译器甚至返回它的值。

如果有人可以帮我解决这个问题,我将不胜感激。

日志

绒球

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.gft</groupId>
<artifactId>app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>app</name>
<description>Axon implementation for app project</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.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.8</java.version>
    <axon.version>3.2</axon.version>
    <junit.version>4.12</junit.version>
    <lombok.version>1.16.20</lombok.version>
    <assertj.version>3.9.1</assertj.version>
    <jackson.version>2.9.5</jackson.version>
    <hamcrest.version>1.3</hamcrest.version>
    <s.dev.tools.version>1.3.0.RELEASE</s.dev.tools.version>
</properties>

<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- Axon -->
    <dependency>
        <groupId>org.axonframework</groupId> …
Run Code Online (Sandbox Code Playgroud)

java spring axon spring-boot spring-boot-devtools

4
推荐指数
2
解决办法
4414
查看次数

SpringBoot devtools 如何检测应用程序的运行环境?

在我的应用中,我添加了 SpringBoot devtools 来提高开发速度。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
Run Code Online (Sandbox Code Playgroud)

在其官方文件中,它说

运行完全打包的应用程序时,开发人员工具会自动禁用。如果您的应用程序是从 java -jar 启动的,或者是从特殊的类加载器启动的,则它被视为“生产应用程序”。

该应用程序是从生产中的 java -jar 启动的。但是它是如何在开发过程中融入 Intellij 理念的呢?

spring-boot spring-boot-devtools

4
推荐指数
1
解决办法
8163
查看次数

spring-boot-devtools 的 UTF-8 字符编码错误

IDE 设置 UTF-8,操作系统 Windows 10,俄语。\n控制台输出代码:

\n\n
System.out.println("\xd1\x82\xd0\xb5\xd1\x81\xd1\x82")\n
Run Code Online (Sandbox Code Playgroud)\n\n

IDEA 中没有“spring-boot-devtools”依赖的 Spring Boot 就可以了

\n\n

Windows 控制台中带有“spring-boot-devtools”的 Spring Boot 就可以了

\n\n

IDEA 中带有“spring-boot-devtools”的 Spring Boot 问题:\n在此输入图像描述

\n

java intellij-idea maven spring-boot spring-boot-devtools

4
推荐指数
1
解决办法
3327
查看次数

Docker 容器内的 Spring Boot 实时重新加载不起作用

我们有一个在 docker 容器内运行的 Spring boot gradle 项目,该容器使用 docker 卷。Spring devtools 实时重新加载功能与以下属性一起使用。

spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=.
spring.devtools.restart.additional-exclude=src/main/java/**
Run Code Online (Sandbox Code Playgroud)

我们使用 docker 卷来更改容器内的源文件。src/main/resources/reload-trigger.txt每当需要实时重新加载时,该文件就会更新。

容器日志显示重新加载有效,但更改没有影响。重新启动容器后,更改就会反映出来。

例如步骤:

  • 使用 GET API 在卷内创建控制器文件,并更新触发器文件
  • GET API 在邮递员中不起作用
  • 停止并启动容器
  • 现在 API 可以工作了

Dockerfile

FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app
RUN ./gradlew getDeps
EXPOSE 8000
CMD ["gradle", "bootRun", "-PskipDownload=true"]
Run Code Online (Sandbox Code Playgroud)

docker spring-boot dockerfile spring-boot-devtools

4
推荐指数
1
解决办法
6456
查看次数

spring-dev-tools 不会重新加载项目中的更改,Intellij idea

Maven 依赖项 spring-boot-devtools 不会自动重新加载项目中的更改。

我通过更改“运行配置”的参数解决了这个问题。

转到编辑配置-> 在 Spring boot 部分您将看到-

运行应用程序更新策略- 选项

更改 - "在“更新”操作时- 更改为 -> 更新触发器文件,以及 - "在框架停用时- 更改为 -> 更新类和资源。

应用更改并按确定。

spring-boot-devtools

4
推荐指数
1
解决办法
3303
查看次数