You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: spring-boot-project/spring-boot-docs/src/docs/asciidoc/using/devtools.adoc
+18-4Lines changed: 18 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -24,6 +24,9 @@ To include devtools support, add the module dependency to your build, as shown i
24
24
}
25
25
----
26
26
27
+
CAUTION: Devtools might cause classloading issues, in particular in multi-module projects.
28
+
<<using#using.devtools.diagnosing-classloading-issues>> explains how to diagnose and solve them.
29
+
27
30
NOTE: Developer tools are automatically disabled when running a fully packaged application.
28
31
If your application is launched from `java -jar` or if it is started from a special classloader, then it is considered a "`production application`".
29
32
You can control this behavior by using the `spring.devtools.restart.enabled` system property.
@@ -40,6 +43,18 @@ When using the Gradle plugin, {spring-boot-gradle-plugin-docs}#packaging-executa
40
43
41
44
42
45
46
+
[[using.devtools.diagnosing-classloading-issues]]
47
+
=== Diagnosing Classloading Issues
48
+
49
+
As described in the <<using#using.devtools.restart.restart-vs-reload>> section, restart functionality is implemented by using two classloaders.
50
+
For most applications, this approach works well.
51
+
However, it can sometimes cause classloading issues, in particular in multi-module projects.
52
+
53
+
To diagnose whether the classloading issues are indeed caused by devtools and its two classloaders, <<using#using.devtools.restart.disable,try disabling restart>>.
54
+
If this solves your problems, <<using#using.devtools.restart.customizing-the-classload,customize the restart classloader>> to include your entire project.
55
+
56
+
57
+
43
58
[[using.devtools.property-defaults]]
44
59
=== Property Defaults
45
60
Several of the libraries supported by Spring Boot use caches to improve performance.
@@ -215,13 +230,12 @@ For IntelliJ IDEA, you can follow the https://www.jetbrains.com/help/idea/spring
As described earlier in the <<using#using.devtools.restart.restart-vs-reload>> section, restart functionality is implemented by using two classloaders.
218
-
For most applications, this approach works well.
219
-
However, it can sometimes cause classloading issues.
233
+
If this causes issues, you might need to customize what gets loaded by which classloader.
220
234
221
235
By default, any open project in your IDE is loaded with the "`restart`" classloader, and any regular `.jar` file is loaded with the "`base`" classloader.
222
-
If you work on a multi-module project, and not every module is imported into your IDE, you may need to customize things.
223
-
To do so, you can create a `META-INF/spring-devtools.properties` file.
236
+
The same is true if you use `mvn spring-boot:run` or `gradle bootRun`: the project containing your `@SpringBootApplication` is loaded with the "`restart`" classloader, and everything else with the "`base`" classloader.
224
237
238
+
You can instruct Spring Boot to load parts of your project with a different classloader by creating a `META-INF/spring-devtools.properties` file.
225
239
The `spring-devtools.properties` file can contain properties prefixed with `restart.exclude` and `restart.include`.
226
240
The `include` elements are items that should be pulled up into the "`restart`" classloader, and the `exclude` elements are items that should be pushed down into the "`base`" classloader.
227
241
The value of the property is a regex pattern that is applied to the classpath, as shown in the following example:
0 commit comments