当前位置: 首页 > 知识库问答 >
问题:

如何使Spring Boot Kotlin bootRun和devtools更快地重新启动?

奚晟
2023-03-14

我正在开发一个Spring Boot Kotlin应用程序,希望加快bootRun启动和devtools重启时间。当前重新启动大约需要20-30秒,与可能热重新加载时近即时刷新前端更改相比,这感觉非常缓慢。

我正在使用macOS Big Sur 11.6.7和Amazon corretto 17 JDK

共有1个答案

乐正心水
2023-03-14

我发现,即使在一个空项目上,在使用devtools重新启动应用程序的过程中,也始终会有将近整整5秒的延迟。我在这里问了这个问题:在Spring Boot Devtools记录“启动应用程序”并最终发现这是由于macOS上JVM的主机名解析问题之后发生了什么。解决方案如下:

  1. 主机名-
127.0.0.1 Monroes-MacBook-Pro.local
::1 Monroes-MacBook-Pro.local

最初,我让IntelliJ自动重建项目,这将导致devtools检测到类文件的更改,但这通常会导致一组更改的多次重新启动,如本文所述:devtools在IntelliJ中重新启动两次。我没有在IntelliJ中自动重建并让devtools监视整个项目,而是做了以下工作:

  1. 使用
  2. 设置触发文件
# directory with trigger file
spring.devtools.restart.additional-paths=trigger-restart
# trigger file
spring.devtools.restart.trigger-file=trigger

build.gradle.kts

...
task("finalize") {
    doLast {
        println("Writing devtools restart trigger file")
        File("./trigger-restart/trigger").writeText(Instant.now().toString())
    }
}
tasks.compileKotlin {
    finalizedBy("finalize")
}
<EOF>

格拉德尔。属性

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
systemProp.kotlinVersion=1.6.21
# https://dev.to/martinhaeusler/is-your-kotlin-compiler-slow-here-s-a-potential-fix-4if4
org.gradle.jvmargs=-Xmx8g -Dkotlin.daemon.jvm.options=-Xmx6g

在这里的Gradle文档中解释了Gradle。属性

# https://docs.gradle.org/current/userguide/configuration_cache.html#config_cache:usage
org.gradle.unsafe.configuration-cache=true

上面的变化对我影响最大,但这里有一些其他页面和建议。页面:

  • 加快Spring Boot启动时间
  • https://www.baeldung.com/spring-boot-startup-speed
  • https://docs.gradle.org/current/userguide/performance.html

尝试的事情:

  • 使用spring启用懒惰bean初始化。主要的延迟初始化=true。Bean初始化将延迟到第一次使用
  • 对于您正在使用的JVM版本,请使用最新的SDK,并考虑尝试另一个JDK。我最终使用了亚马逊Corretto 17

作为参考,在我的计算机上,从进行更改到让应用程序再次运行和服务请求之间的最终周转时间现在是4-10秒。IntelliJ中的编译需要2-6秒,应用程序重新启动始终需要大约2秒。

  • 连续构建的Spring Boot bootRun
 类似资料:
  • 我遵循这篇指南https://medium.com/@lhartikk/development-environment-in-spring-boot-with-docker-734ad6c50b34,尝试在本地docker容器中使用我的简单Spring Boot应用程序实现自动重启、实时重新加载和远程调试。触发自动重新启动时出现错误: DockerFile:

  • 我在我的Android和iOS应用程序上都使用firebase进行推送通知,一切都很好。如果我重新启动设备,推送通知确实会出现,但要过一段时间(大约1-2分钟)。另一方面,WhatsApp几乎立即发出推送通知。我在想我怎样才能获得这种表现。我在android上读到过,我可以在启动时启动后台服务,但这有什么好处呢? 设备重启后的Android推送通知 在后台服务中,我唯一能想到的是从启动开始订阅推送

  • 我真的很喜欢PyCharm的想法,也很乐意使用它。然而,它消耗计算机处理能力和延迟的倾向是一个很大的缺点。 在不久的将来,我将运行Python入门课程,并建议学生安装PyCharm,因为它似乎是目前最友好的IDE。 有没有一种方法可以加快PyCharm的速度,使其处理更加“轻松”?

  • 问题内容: 我需要一种方法来轻松地重新启动/替换bash脚本,而无需手动停止/重新启动该过程。 这是我当前脚本的工作方式: 基本上,如果游戏停止了,它将自动重新启动,但是该脚本已经加载到内存中,因此,如果我要对其进行修改,则必须手动终止该脚本并重新启动它才能使更改生效。我正在运行至少200个游戏服务器实例,所以手动执行此操作并杀死它,然后再次手动启动每个脚本并不明智。 当游戏服务器停止时,我希望它

  • 我有一个Jenkins项目,在SCM中存储的JenkinsFile中定义了一个声明性管道。我使用“来自SCM的管道脚本”选项。 有时,如果出现故障,我会在jenkins工作区快速修复,并从特定阶段开始重新运行管道。这是很好的工作。 有些情况下,我需要更新JenkinsFile,然后用更新后的Jenkins文件进行“阶段重启”。然而,我在workspace文件夹中的任何地方都找不到JenkinsFi

  • 我已经为我的Kubernetes入口服务更新了SSL证书,但我不知道如何重新启动实例以使用更新的证书机密,而不需要手动删除和重新启动入口实例。这并不理想,因为使用该特定证书的入口数量太多(都位于同一TLD上)。我如何强制它使用更新的秘密?