我使用 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) 我们有一个更大的 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 中的执行工作正常,没有任何问题。
我们正在使用:
有人已经观察到这类问题了吗?是否存在不同的解决方案然后删除依赖项?
我有一个使用 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 声称要重建项目,但实际上并未 …
在春季启动每当文件在classpath改变,应用程序中使用弹簧引导devtools将导致应用程序重新启动.有些也可以使用JRebel实现,但JRebel不是免费的.
我在dropwizard中寻找相同的功能.Springboot中是否有任何免费工具或任何类似devtools的库可以在dropwizard中实现?
当我更改 /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
我使用 Springboot 创建我的应用程序,所以在 Springboot Doc 中说如果我使用 devtools,tomcat 将重新启动我的代码中的所有更改,但是我使用 maven 面板来运行我的应用程序只需双击 spring-boot:run 插件,但是当我更改了我的 tomcat 不会重新启动的任何代码。
我怎样才能解决这个问题?tks
我不愿意运行的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) 在我的应用中,我添加了 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 理念的呢?
IDE 设置 UTF-8,操作系统 Windows 10,俄语。\n控制台输出代码:
\n\nSystem.out.println("\xd1\x82\xd0\xb5\xd1\x81\xd1\x82")\nRun Code Online (Sandbox Code Playgroud)\n\nIDEA 中没有“spring-boot-devtools”依赖的 Spring Boot 就可以了
\n\nWindows 控制台中带有“spring-boot-devtools”的 Spring Boot 就可以了
\n\n\n我们有一个在 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每当需要实时重新加载时,该文件就会更新。
容器日志显示重新加载有效,但更改没有影响。重新启动容器后,更改就会反映出来。
例如步骤:
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) Maven 依赖项 spring-boot-devtools 不会自动重新加载项目中的更改。
我通过更改“运行配置”的参数解决了这个问题。
转到编辑配置-> 在 Spring boot 部分您将看到-
运行应用程序更新策略- 选项
更改 - "在“更新”操作时- 更改为 -> 更新触发器文件,以及 - "在框架停用时- 更改为 -> 更新类和资源。
应用更改并按确定。
spring-boot ×8
java ×6
docker ×2
maven ×2
spring ×2
axon ×1
dockerfile ×1
dropwizard ×1
gradle ×1
jrebel ×1
livereload ×1
thymeleaf ×1