IDEA 和 Spring Tools 都在开发过程中通过自定义分层编译启动 Boot 应用程序,并禁用验证器以减少启动时间。我们应该spring-boot:run
在 Maven 和Gradle 中做同样的事情bootRun
。
[spring-projects/spring-boot]更新 Gradle bootRun 以启动带有标志的 JVM,以实现开发时优化
回答
@wilkinsona我们可以得到关于IDEA和Spring Tools关于自定义分层编译和禁用验证器的学习参考吗?
@dosdebug 您可以使用 Spring Boot 支持启动应用程序并查看 JVM 选项。我不确定这两种情况是否在任何地方都有记录。 Spring IDE中的相关代码在这里。
@wilkinsona肯定会有更好的解决方案,但是您能否看看并提出建议,这是否是正确的方向或者我应该关注哪里。
https://github.com/dosdebug/spring-boot/commit/d712978571c79195ab5f0d0d396d4633848cb390
我以前从未尝试过贡献,但想看看我是否真的能做到。
感谢您查看此内容,@dosdebug。我不确定我们是否已经准备好实施这一点,因为我们需要做出一些设计决策。例如,我们需要决定何时应用参数(总是,当用户没有指定任何内容时,总是除非它们被禁用,等等)。
@wilkinsona 好的,当然。不用担心。但感谢您抽出时间。
该分支包含 Gradle 方面的提案。
默认情况下-Xverify:none
, 和-XX:TieredStopAtLevel=1
被添加到任务使用的 JVM 参数中BootRun
。当用户配置了某些 JVM 参数和未配置某些 JVM 参数时,都会发生这种情况。可以通过将新fastLaunch
属性设置为 来禁用添加这些 JVM 参数false
。
我最初探索了一种不需要该fastLaunch
属性的方法,但它变得非常复杂且难以理解,特别是当applicationDefaultJvmArgs
考虑到应用程序插件的属性时。虽然我最终添加了一个额外的属性,但我认为更简单、更容易记录的行为抵消了增加的复杂性。也应该可以在 Maven 插件中实现相同的行为。
标记以引起团队注意,看看我们是否就该方法达成一致。我也不相信该酒店的名称fastLaunch
,因此我们将非常感谢您提出更好的名称建议。
@wilkinsona 就这样怎么样quick
?
谢谢你的建议。一旦加载了所有类,禁用验证器就没有任何好处,并且将 JIT 调整为在较早的编译级别停止实际上会减慢长时间运行的进程的速度。换句话说,这些设置实际上只是减少了初始启动时间,而不是让一切变得更快。因此,我认为launch
或start
类似的内容应该出现在名称中。
受到 IntelliJ IDEA 中使用的术语的启发,我们将使用optimizedLaunch
.
@dosdebug 你想根据我为 Gradle 所做的事情更新你的 Maven 提案,但要调用该属性optimizedLaunch
吗?
@wilkinsona 当然,我要尝试一下并提交 PR
@wilkinsona 请在有时间时查看https://github.com/spring-projects/spring-boot/pull/16941 。
我已将本期的标题重新命名为 Gradle。 #16941 将处理 Maven 方面的事情。