【问题标题】:How does SpringBoot devtools detect application's running environment?Spring Boot devtools如何检测应用程序运行环境?
【发布时间】:2019-01-08 02:55:30
【问题描述】:

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

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

在其official document 中,它说

运行完全打包的应用程序时,开发人员工具会自动禁用。如果你的应用程序是从 java -jar 启动的,或者它是从一个特殊的类加载器启动的,那么它被认为是一个“生产应用程序”。

应用程序是从生产环境中的 java -jar 启动的。但是在开发过程中,它是如何在 Intellij idea 中落地的呢?

【问题讨论】:

  • 简单 - IDE 运行应用程序爆炸。确定随机资源是文件系统路径还是不透明路径是一项微不足道的任务。
  • 嗨,鲍里斯,我不太明白你的意思。你能再解释一下吗?

标签: spring-boot spring-boot-devtools


【解决方案1】:

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

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

Spring Boot Maven Plugin docs:

默认情况下会自动排除 Devtools(您可以控制 使用 excludeDevtools 属性)。为了使它与 war 打包,spring-boot-devtools 依赖必须设置为 可选或具有提供的范围。

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

当 spring-boot-devtools 运行时,你会得到类似这样的日志:

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

【讨论】:

  • 如果我从 IDE 运行 spring 应用程序,它是在后台使用 java -jar 吗?
  • 从您的 IDE 中,它不会在 spring-boot-maven 插件构建的最终 JAR 文件中使用 java -jar。正如蜘蛛鲍里斯所说,它以爆炸模式运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
相关资源
最近更新 更多