Spring Boot devtools如何检测应用运行环境?

How does SpringBoot devtools detect application's running environment?

在我的应用中,我添加了SpringBoot devtools来提高开发速度。

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

在其 official document 中说

Developer tools are automatically disabled when running a fully packaged application. If your application is launched from java -jar or if it is started from a special classloader, then it is considered a “production application”.

该应用程序从生产中的 java -jar 启动。但是它在开发过程中是如何在 Intellij IDEA 中启动的呢?

其实很简单,但不明显。当 spring-boot-devtools 包含在类路径中时,将启用 devtools。

默认情况下,spring-boot-maven-plugin 在构建最终的 jar 文件时排除 spring-boot-devtools,因此它被禁用。

Spring Boot Maven Plugin docs:

Devtools is automatically excluded by default (you can control that using the excludeDevtools property). In order to make that work with war packaging, the spring-boot-devtools dependency must be set as optional or with the provided scope.

如果您 运行 您的 spring 应用程序来自您的 IDE 或 运行 mvn spring-boot:run spring-boot-devtools 在您的类路径中.

当 spring-boot-devtools 为 运行ning 时,您将获得类似这样的日志:

.e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable