java - mvn spring-boot :run slow compared to java -jar xxx. jar

标签 java spring-boot maven

我正在尝试将现有的命令行应用程序迁移到 Spring boot,但遇到了一个奇怪的问题。

该应用程序可以运行,但启动时似乎很慢 mvn spring-boot:run

并不是应用程序启动慢。有一种方法应该从数据库中获取大约 1.8 Mio 记录并从结果集中创建 POJO。 通常这最多需要 40 秒。

使用 Maven 启动应用程序需要 > 5 分钟。

如果我用java -jar app.jar启动它,它工作得很好/很快。 在 IntelliJ 中启动应用程序时速度也很快。

我猜测这可能与类路径有关,但这只是一个猜测。

我在应用程序中所做的就是将一些 Singelton 类迁移到 @Components 并添加 spring-boot-maven-插件

有什么想法吗?

最佳答案

发现问题:

TLDR:使用 spring boot 2.7 和(不支持的)Java 17

希望这对某人有帮助:

  1. 我要迁移的应用使用的是 Java 17。
  2. Spring boot 2.x 不支持 Java 17。

实际上,我通过像这样配置 Maven 插件来使其与 Java 17 兼容:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <optimizedLaunch>false</optimizedLaunch>
    </configuration>
</plugin>

通过设置optimizedLaunch=false,插件将忽略传递给 JVM 的 -XX:TieredStopAtLevel=1 标志,这似乎是导致问题的原因。

示例:

慢:

/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home/bin/java -XX:TieredStopAtLevel=1 -cp A_LOT_OF_DEPS_HERE com.myapp.SpringApp

快速(无-XX:TieredStopAtLevel=1):

/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home/bin/java -cp A_LOT_OF_DEPS_HERE com.myapp.SpringApp

我仍然不明白的是为什么代码在某些模式匹配(在我的代码中)时如此慢(spring-boot:run),但在使用 运行时并不慢java(17) -jar my-app.jar)

无论如何,一如既往,键盘后面的设备的故障(那就是我)

关于java - mvn spring-boot :run slow compared to java -jar xxx. jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74534018/

相关文章:

java - 实现用户登录的SAML实现

java - Spring 启动 2 : Unable to build Hibernate SessionFactory

spring - 如何将依赖项上载到 Artifact 服务器

java - @Autowire如何在不使用@Bean注解的情况下获取spring bean

java - Dockerizing 使用 oracle-ojdbc : How do you get the driver in there? 的 Maven 应用程序

java - 生命周期配置未涵盖插件执行 : org. codehaus.gmaven :groovy-maven-plugin:2. 1.1

java - cacheable 如何使用其名称获取方法参数值

java - 如何设置主 Activity 中显示的默认 fragment ?

java - Spring 过滤器在初始化函数后丢失设置变量

java - 是否可以根据springboot中application.properties中的前缀创建多个bean