spring boot hotswap with Intellij IDE

可紊 提交于 2019-11-26 10:19:00

问题


I have a spring boot application running fine with Intellij IDE. i.e i started the Application class that has the main method which delegates to SpringApplication.run. Everything works great except hotswap. When I change the source, I am forced to re-start the application. Even If I start the application in debug mode, I dont see hotswap working. I could see that Intellij\'s Debug settings have hotswap enabled.

My observation shows that when I run the springboot application, classpath used is my

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

Files under classes/production are not getting updated when I change the code. Intellij IDE compiles the files but does not update classes/production directory. How do I get hotswap working with IntelliJ IDE for spring-boot?


回答1:


A solution that uses devTools works :

1 - Adding devtools to your project

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

2- Enabling automatic build

Open the Settings --> Build-Execution-Deployment --> Compiler and enable :

Build Project Automatically.

3- Update the value of compiler.automake.allow.when.app.running

press ctrl+shift+A and search for the registry. In the registry, enable :

compiler.automake.allow.when.app.running

Hope it helps !


References :

  • https://dzone.com/articles/spring-boot-application-live-reload-hot-swap-with



回答2:


Found out the root cause. This has nothing to do with Spring-boot. On changing my groovy source files, files were not auto-compiled.

To recompile changed files and swap them:

  • Ctrl+Shift+F9 on Windows
  • Cmd+Shift+F9 on Mac



回答3:


Step 1: Add developer tools denpendency

Maven.

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

Gradle.

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

Step 2: Go to File | Settings | Build, Execution, Deployment | Compiler

enable Build project automatically & Apply & OK

Step 3: Press shortcut key Ctrl+Shift+A & Search Registry keyword & Press Enter

Enable complier.automake.allow.when.app.running & Click Close Button

Step 4: Disable cache on your favorite web browser

Step 5: Done!!!

Watch Solution On YouTube




回答4:


Use spring-loaded. It works fine with bean reloading. It's free alternative to JRebel.

Another way is to use DCEVM or hotswapagent




回答5:


I noticed the same problem as well. I am on the Intellij 13.1.1. and for it to hotswap the changed class. I have to run the app in debug mode, then after changing the class, select "Run->Reload Changed Classes" manually.

I also have the debugger set to hotswap as indicated in http://www.jetbrains.com/idea/webhelp/reloading-classes.html but doesn't seem to work.

Anyway, at least the manual "Run->Reload Changed Classes" menu works.




回答6:


In my case even after adding the Spring Boot dev tools and checking the build project automatically, it was not working. What was missing was this:

  1. Go to the project run configuration.

  2. Set on'Update' action and 'On frame deactivation' both to 'Update classes and resources'. And it worked like a charm.




回答7:


You can use either of the following methods to auto reload Thymeleaf templates:

  1. Spring Boot Dev Tools
  2. Change Thymeleaf Templates Path
  3. Gulp Watch

I recommend Gulp watch as it is easier to setup and works great:

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']);

Now enter the following command in your terminal to start gulp watch:

$ gulp 
//OR
$ gulp watch

I wrote a blog post on auto reloading Thymeleaf templates without restart in IntelliJ IDE.




回答8:


You can follow the process given below-



来源:https://stackoverflow.com/questions/23155244/spring-boot-hotswap-with-intellij-ide

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!