SpringBoot 中使用spring-boot-devtools不可应用至生产环境

目录

Maven scope配置相关参数说明

spring-boot-devtools不推荐的配置


如题:这个问题是开发中引入生产环节的问题,如果程序存在Bug,那么spring-boot-devtools在抛出未处理的异常时会出现类似应用重启过程(修改一个类时,本地可以看到devtools在开发环境会关闭应用并重新启动),导致数据源关闭。这里提出两个生产中要非常注意的问题:

  • try{}finlly{} 没有catch,会导致严重吞掉异常问题
  • 项目中使用了spring-boot-devtools热部署插件导致异常情况下应用重启(此时Druid数据源关闭,无法再执行更新)

Maven scope配置相关参数说明

以下内容参考:https://maven.apache.org/pom.html

scope:此元素引用手头任务的类路径(编译和运行时,测试等),以及如何限制依赖项的可传递性。共有五个作用域:

  • compile-这是默认范围,如果未指定则使用。编译依赖关系在所有类路径中均可用。此外,这些依赖项会传播到相关项目。
  • provided-这很像编译,但是表明您希望JDK或容器在运行时提供它。它仅在编译和测试类路径上可用,并且不可传递。
  • runtime-此作用域指示依赖关系不是编译所必需的,而是执行所必需的。它在运行时和测试类路径中,但不在编译类路径中。
  • test-此范围表明该依赖关系对于正常使用该应用程序不是必需的,并且仅在测试编译和执行阶段可用。它不是可传递的。
  • system-此范围类似于,provided除了必须提供显式包含它的JAR之外。该工件始终可用,并且不会在存储库中查找。

 注意:弄清楚scope对我们使用maven绝对有好处。

spring-boot-devtools不推荐的配置

 <!-- 本地热部署插件:慎用-容易导致应用重启数据丢失 -->
       <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.2.1.RELEASE</version>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>-->

通过对scope配置类型的了解我们知道,runtime会在程序执行过程中被执行,也就满足了devtools被修改或抛出异常时自动进行类的重载条件。

在实际生产环境中我们可以把scope设置为provided,这也就是我们为什么看到很多开源框架示例都使用provided域的原因。

猜你喜欢

转载自blog.csdn.net/boonya/article/details/114144276