【发布时间】:2019-03-14 17:56:09
【问题描述】:
我有一个大型 Spring Boot 应用程序,它由多个项目组成,项目之间存在依赖关系。其中两个项目是“Web 应用程序”,可以按常规方式运行。两者都包括 Spring 的用于重启/实时重新加载功能的开发工具。除了 devtools 功能之外,一切都可以正常构建/运行。
我们遇到的问题是,一旦启动了其中一个应用程序,整个应用程序目录就会成为重新加载触发器的一部分 - 资源、模板、CSS、gradle.build ...从根目录触及任何文件子项目关闭会触发重新加载。至少可以说,这使得前端开发变得乏味。
其中一个名为 Project1 的项目有一个 SpringBoot 应用程序,该应用程序位于 project1/app 目录中。它依赖于 project1/core 和另一个名为“commons”的项目。
在控制台输出的开头,会出现以下几行:
DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : []
org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, ...]
org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading :
file:/C:/.../project1/app/bin/,
file:/C:/.../project1/core/bin/,
file:/C:/.../commons/bin/,
file:/C:/.../project1/app/]
似乎是最后一个条目导致扫描整个 project1/app 目录以在任何更改时重新启动。
带有 devtools 的“标准”启动项目在同一行显示了这一点:
DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/C:/.../auto-restart/bin/]
如果我将依赖项添加到其他项目之一,它会显示如下:
DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/C:/.../auto-restart/bin/, file:/C:/.../commons/bin/]
在我看来是正确的 - 不包括顶级文件夹。
最后一点:使用 Eclipse,如果“行为不端”的项目之一正在运行,则控制台标题上的“触发 devtools 重启”图标不起作用。它确实适用于小型示例项目。
我无法找到有关如何构建 ChangeableUrls 列表的任何信息,或者为什么它可能会获取除 /bin 之外的应用程序根目录。尝试更改 application.properties 中的 include 或 exclude 参数没有影响 - 仍会扫描整个目录以进行更改。
有趣的是,包括 spring.devtools.restart.trigger-file 属性确实停止扫描所有内容......但它破坏了后端开发的目的。
【问题讨论】:
标签: spring-boot devtools