问题标签 [spring-boot-devtools]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
301 浏览

spring-boot - GraalVM 上的热重载

我最近从 OpenJDK 8 升级到 GraalVM 20.1.0 (OpenJDK 11.0.7)。有没有人知道如何实现热类重新加载(或至少是网络资产重新部署)。

  • Spring-Boot-Devtools 不会接受这些更改。
  • HotSpotAgent (DCEVM) 有一个 JDK11 版本,您可以用它来替换您的 JVM,但它不是 GraalVM(并且不会具有 Polyglot 功能)
  • JRebel(我有许可证,不支持 GraalVM)

是这样吗?肯定不是...

0 投票
1 回答
716 浏览

java - 使用 Hibernate 5.1 和 Spring 5.2.9 保存实体无法保存实体(spring-boot 2.3.4,spring-boot-devtools)

[编辑:将 q 中的弹簧版本固定到 5.2.9。v2.3.4 是聚合的 Maven 开发。]

我已经通过大量帖子试图弄清楚这一点。似乎存在一个巨大的兼容性问题,但我无法弄清楚要更改为哪些版本。我通常不做Java,但在教学时必须这样做,所以希望有人会忽略我不存在的Java技能并给我一些建议。‍♂️</p>

如果我单步执行反汇编代码,我可以看到我的单元测试(集成)在尝试反映我的 ID 属性时会做其他事情,而不是使用 Spring 运行时所做的事情。

[编辑] 这是 SQL 日志:

这是异常和跟踪的顶部:

这是一个使用 SQL Lite 的超级简单的数据库设置。

唯一的实体是这样映射的:

和实体:

这是一个测试,没有不同的基础设施和配置,而不是(没有)让 Spring 运行应用程序:

我相当确定这与在我的UOWStandardServiceRegistryBuilder中设置会话工厂有关。不知道该怎么做。

太晚了,我希望明天为一些学生演示这个,所以如果我离开这篇文章有点偏离 SO 的首选标准,我深表歉意。

[编辑]
回购在这里发布:https ://github.com/lars-erik/hiof-sweat2020-chatroom-demo

[2 天后编辑]
我设法确定了它在 Web 项目中运行时抛出的位置。对于像我这样的 dotnet 开发人员,这闻起来就像我的核心“程序集”(模块)的两个版本被加载到“域”中,并且 ID 属性是从“错误模块的元数据”中读取的。不知道,但看起来就是这样。在该getIdentifier方法中,owner 和 idGetter 都指向同一个类,org.hiof.chatroom.core.ChatMessage. 然而,invoke坚持实例不是 id getter 的声明类。这是跟踪:

[编辑十月。11.] 使用 spring 运行时,调试当前显示 ChatMessage 类的两个版本。:/

所有者类的类加载器是“RestartClassLoader”,而声明类加载器是“Launcher$AppClassLoader”。

0 投票
0 回答
752 浏览

spring-boot - Spring Boot 开发工具/实时重新加载 - 静态资源的刷新不起作用

为了改善开发人员体验,我尝试包含 Spring Dev Tools。

我的设置:

  • 多个模块
  • 摇篮 6.6
  • 春季启动 2.4.2
  • 百里香叶
  • 使用 Webpack 响应子页面

我使用带有一个settings.gradle文件和一个子模块的多项目 gradle 构建,该子模块也具有 spring boot bootJar。在那个build.gradle文件中,我添加了这一developmentOnly("org.springframework.boot:spring-boot-devtools")行。

IntelliJ 配置

我通过 IntelliJ 启动我的应用程序:

在此处输入图像描述

我还在“设置>编译器”设置以及“compiler.automake.allow.when.app.running”中启用了“自动构建项目”。

什么有效

当我启动应用程序时,我会看到日志消息

[2021-03-17 14:18:02.001] INFO [restartedMain] --- o.s.b.d.a.OptionalLiveReloadServer: LiveReload server is running on port 35729

说明我的 LiveReloadServer 已启动。

当我在我的 Java 文件中应用更改时,会触发构建和重新启动,因此更改的重新启动确实有效 - 虽然速度很慢 - 即使我只是更改 Java 类中的一行,重建至少需要 15 秒。

什么不起作用

当我将更改应用到我的 HTML、CSS 或 JS 文件或我的 react 应用程序时,只有在项目重建后才会反映更改。我所有的资源都在默认resources/static文件夹中,因此它们应该由 dev-tools reload 处理。

仅供参考,我将我的 react-app 与 webpack 打包在一起,当我开始webpack watch任务时,它会在我应用更改时正确重建我的 bundle.js。

我确实有一个自定义 ResourceRegistryHandler 设置,也许这​​是问题的一部分,即使我不明白为什么:

实时重新加载

除了静态资源根本没有刷新这一事实之外,我还想知道如何使用 live reload chrome 插件,因为Cannot download livereload.js当我想要启用我的 live reload 浏览器插件时,我总是会收到一个弹出窗口。

我的问题

  • 如何让 Spring 刷新静态资源?他们甚至不会在重新加载页面时为我刷新,只有在触发并完成重启后
  • 我怎样才能让它与 Live Reload 一起使用?

我也很感激任何关于为什么我的项目构建可能需要那么长时间的任何提示,即使有这么小的变化,我可能会检查 gradle 构建扫描。

0 投票
4 回答
1735 浏览

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

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

从文档中:

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

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

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

好吧,也许它正在做一些更聪明的事情。我修改了一些源 .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 声称要重建项目,但实际上并没有触及 jar 文件,但这是另一回事。)我正在寻找一个非 IDE 特定的解决方案。

0 投票
0 回答
46 浏览

spring-boot - 有没有办法在不使用任何 IDE 的情况下从终端或控制台自动重新加载 maven spring-boot 项目?

有没有办法从 [console 1] 签出更改(可能使用 git),而 [console 0] 中已经运行的 maven 项目将自动刷新并将这些更改应用到正在运行的进程中?

这适用于以下 pom 设置,但在我看来,我必须拥有 IntelliJ 或 Eclipse 之类的 IDE 才能使其工作。正如这个问题中所回答的:Spring Boot 如何在不重新启动服务器的情况下加载代码更改

使用以下 pom.xml 依赖项:

有没有办法在没有任何 IDE 的情况下做同样的事情并使修改应用于快速重新编译?

0 投票
0 回答
149 浏览

spring-boot - Spring boot 2.4.5 security + devtools + vaadin 嵌入式tomcat无法反序列化会话属性

我有一个带有安全性、devtools、vaadin 和嵌入式 tomcat 的 Spring Boot 应用程序。

我已经根据本指南配置了 Spring 安全性:VAADIN-securering-your-app-with-spring-security它运行良好,我可以登录......等等,但是当我改变一些东西并且我想重新加载时,服务器重新启动,但无法反序列化持久会话,并提示我再次登录。

反序列化错误是指 org.springframework.security.authentication.UsernamePasswordAuthenticationToken 的主体字段,在我的例子中是 String。

请参阅下面的详细信息。

构建.gradle:

应用程序属性:

身份验证提供者:

错误:

无法反序列化会话属性 [com.vaadin.flow.server.VaadinSession.springServlet]

java.io.InvalidClassException: org.springframework.security.authentication.UsernamePasswordAuthenticationToken; java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:807) 的字段主体的无效描述符 ~[na:1.8.0_202] 在 java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:891) ~[na:1.8.0_202 ] 在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1857) ~[na:1.8.0_202] 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751) ~[na:1.8.0_202] 在 java. io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042) ~[na:1.8.0_202] at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573) ~[na:1.8.0_202] at java.io.ObjectInputStream。 defaultReadFields(ObjectInputStream.java:2287) ~[na:1.8.0_202] at java.io.ObjectInputStream.readSerialData(ObjectInputStream.

0 投票
0 回答
17 浏览

spring - 为 Java Maven Spring Web 项目设置 Eclipse

我将 Eclipse 用于带有 Java Maven 和 Spring 的 Web 项目。如果我编辑一个HTML页面或CSS页面,我必须“更新 Maven 项目”才能看到效果。这非常耗时。一位老师说修复你的环境变量。我查了一下并添加了JAVA_HOME等。我问同学它在哪里为他们自动更新,他们的环境变量与我的JAVA_HOME编辑之前的环境变量相同。我们都使用开发工具依赖项

我的 Maven 偏好

有没有这方面的链接?提前致谢。

0 投票
2 回答
72 浏览

drools - Drools 6.5:java.lang.RuntimeException:全局的非法类。预期 [com.user.PersonAccount],找到 [com.user.PersonAccount]

我在我的 Grails 应用程序中使用“org.springframework.boot:spring-boot-devtools”依赖项在代码更改时实时重新加载应用程序。问题是,这种依赖似乎导致了一些与流口水的冲突。

kieSession.setGlobal(name, value)我的代码中,我收到以下错误:

删除“spring-boot-devtools”依赖项解决了这个问题,但我需要这个依赖项来进行实时重新加载,这在开发中很重要。

任何人都知道为什么这种依赖会导致这种冲突?以及我能做些什么来解决它或作为一种解决方法?

提前致谢!

0 投票
0 回答
92 浏览

remote-debugging - Spring Boot – 开发者工具 – 远程模式抛出 CertificateException: No name matching localhost found

我正在尝试使用“org.springframework.boot.devtools.RemoteSpringApplication”选项运行 Spring Boot Dev Tools 来远程调试我的应用程序,如下所述:
https ://docs.spring.io/spring-boot/docs/current /reference/html/using.html#using.devtools.remote-applications
它开始正常。我运行服务器应用程序并等待它完全启动。然后我从 STS4 (Eclipse) 运行远程 DevTools 配置,它可以正常启动,没有任何问题。我在控制台中看到:

我的问题是,当我将客户端应用程序连接到服务器时,我在 DevTools 的控制台中收到以下异常:

0 投票
1 回答
726 浏览

spring - 如何一起使用 spring-cloud-starter-config 和 spring-boot-devtools?

spring-cloud-starter-config 本身和 spring-boot-devtools 一样完美,但是当我创建一个同时使用这两者的项目时,我得到了这个错误:

bootstrap-local_dev.yaml:

所有其他 yaml 和属性文件都是空白的。只有环境变量集是:

pom.xml 父级是:

pom.xml 中的依赖项部分是:

我需要配置或设置什么特别的东西才能在同一个项目中同时获得 spring-cloud-starter-config 和 spring-boot-devtools 的好处?