gpt4 book ai didi

java - 在 Spring-Boot 项目中热到 Intellij 中的 HotSwap 代码?

转载 作者:行者123 更新时间:2023-11-30 07:42:31 26 4
gpt4 key购买 nike

我将 spring-boot-starter 用于打开静态套接字进行通信的大型服务器项目。因为每次代码更改后不必总是在 Intellij IDEA 中重新启动服务器(从而退出套接字连接),我正在尝试 HotSwap 更改后的 *.java 代码.

我试过如下,没有成功:

  • 添加了 maven spring-boot-devtools 依赖
  • 设置> 自动构建项目[yes]
  • 注册表:complier.automake.allow.when.app.running [true]
  • 运行配置 > 更新策略:更新类和资源

但是:每当我修改一个类时,我的应用程序都会自动重新启动。当然这也会重新加载类,但我也可以随意触发重启。我没有通过自动重启获得任何好处。

所以我通过 spring.devtools.restart.enabled=false 禁用了重启。但是在服务器重新启动之前,代码交换不起作用。

但是如果不显式重新启动是否有可能呢?

旁注:我不是要在浏览器中热交换网络用户界面。我只想重新加载 Java 代码。

最佳答案

这就是 Spring Boot 开发工具的工作方式,每次更改都需要重新启动,但使用开发工具重新启动要快得多,因为它使用自定义类加载器:

The restart technology provided by Spring Boot works by using two classloaders. Classes that do not change (for example, those from third-party jars) are loaded into a base classloader. Classes that you are actively developing are loaded into a restart classloader. When the application is restarted, the restart classloader is thrown away and a new one is created. This approach means that application restarts are typically much faster than “cold starts”, since the base classloader is already available and populated.

如果您想在不重新启动的情况下热交换代码,那么一种选择是使用 JRebel . Spring Boot 文档声明相同:

If you find that restarts are not quick enough for your applications or you encounter classloading issues, you could consider reloading technologies such as JRebel from ZeroTurnaround.

关于java - 在 Spring-Boot 项目中热到 Intellij 中的 HotSwap 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54556072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com