与 Intellij IDE 的 Spring 引导热交换

我有一个用 IntellijIDE 运行良好的 Spring 引导应用程序。例如,我启动了 Application 类,其中包含委托给 SpringApplication.run 的 main 方法。除了热插拔之外,一切都很好。当我更改源代码时,我必须重新启动应用程序。即使我在调试模式下启动应用程序,我也看不到热交换工作。我可以看到 Intellij 的调试设置启用了热交换。

我的观察表明,当我运行 Springboot 应用程序时,使用的类路径是我的

/projects/MyProject/classes/production/....

当我更改代码时,classes/production下的文件不会得到更新。Intellij IDE 编译文件,但不更新类/产品目录。如何使用 IntelliJIDE 进行热插拔来进行弹簧启动?

69899 次浏览

找到了根本原因。这与 Spring-boot 无关。在更改我的 Groovy 源文件时,文件不是自动编译的。

重新编译已更改的文件并交换它们:

  • Windows 上的 Ctrl+Shift+F9
  • Cmd+Shift+F9呼叫 Mac

我也注意到了同样的问题。我在 Intellij 13.1.1上。然后热插拔改变的类。我必须在调试模式下运行应用程序,然后在更改类之后,手动选择“ Run-> Relload Changed Class”。

我也有调试器设置为热交换,在 http://www.jetbrains.com/idea/webhelp/reloading-classes.html中指出,但似乎不工作。

无论如何,至少手动“运行-> 重新加载已更改类”菜单工作。

使用 弹簧装置。它可以很好地重新加载 bean。它是 JRebel 的免费替代品。

另一种方法是使用 DCEVM热交换器

一个使用 devTools 的解决方案是可行的:

1-向项目中添加 devtools

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>

2-启用自动构建

打开 设置—— > 构建-执行-部署—— > 编译器和启用:

Build Project Automatically.

3-更新 developer.autoake.allow.when.app.running 的值

ctrl+shift+A并搜索 registry。在注册表中,启用:

compiler.automake.allow.when.app.running

希望能有帮助!


参考文献:

在我的例子中,即使添加了 Spring Boot dev 工具并自动检查了构建项目,它还是不工作。缺少的是这个:

  1. 转到项目运行配置。

  2. 将“更新”和“关闭帧”设置为“更新类和资源”。 而且效果非常好

enter image description here

第一步: 添加开发人员工具依赖项

玛文。

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>

格拉德尔。

dependencies {
compile("org.springframework.boot:spring-boot-devtools")
}

步骤2: 转到 文件 | 设置 | 构建、执行、部署 | 编译器

启动 自动生成项目 & 申请 & 好的

enter image description here

步骤3: 按快捷键 Ctrl + Shift + A & 搜索 注册处关键字 & 按回车

enter image description here

启用 运行并单击 差不多按钮

enter image description here

第四步: 在你最喜欢的网页浏览器上使用 关闭缓存

enter image description here

第五步: 完成! ! !

在 YouTube 上观看解决方案

Solution

您可以使用以下任何一种方法来自动重新加载 Thymeleaf 模板:

  1. 弹簧启动开发工具
  2. 更改 Thymelleaf 模板路径
  3. 咕噜手表

我推荐 狼吞虎咽手表,因为它更容易安装,工作效果也很好:

var gulp = require('gulp'),
watch = require('gulp-watch');


gulp.task('watch', function () {
return watch('src/main/resources/**/*.*', () => {
gulp.src('src/main/resources/**')
//replace with build/resources/main/ for netBeans
.pipe(gulp.dest('out/production/resources/'));
});
});


gulp.task('default', ['watch']);

现在,在终端中输入以下命令,开始“咕噜”监视:

$ gulp
//OR
$ gulp watch

我在 在 IntelliJIDE 中自动重新加载 Thymeleaf 模板而无需重新启动上写了一篇博文。

对于多个更改,使用“编译并重新加载文件”(首先添加“ spring-boot-devtools”)。双击“ Shift”在 Mac 中显示图表。

或者试试我还没有试过的 弹簧装置,但是看起来它可以工作。 enter image description here

添加部署工件,在部署选项卡中,这为我解决了问题。

@ Sameer Khanal 的回答起作用了,但是时间已经过去这么久了,我想澄清一下

  1. 安装 Spring 启动 devtools 依赖项(https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools)

  2. 修改 run 选项 Edit running configuration

  3. 更新 On 'Update' actionOn frame deactivation的选项如下: enter image description here

  4. 点击 OK 就可以了

希望能帮上忙