gpt4 book ai didi

java - SpringBoot 2 (2.1.6.RELEASE) StackOverFlowError

转载 作者:行者123 更新时间:2023-12-04 02:46:20 38 4
gpt4 key购买 nike

我有一个 spring boot 2 应用程序,它在 IDE (IntelliJ) 中运行时按预期启动和运行。
但是,当我通过命令行 (java -jar app.jar) 运行应用程序时,出现 StackOverFlowError 异常。

Caused by: java.lang.reflect.InvocationTargetException
... 1024 more
Caused by: java.lang.reflect.InvocationTargetException
... 1024 more
Caused by: java.lang.reflect.InvocationTargetException
... 1024 more
Caused by: java.lang.StackOverflowError
at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1012)
at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535)
at java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:463)
at java.lang.ClassLoader.loadClass(ClassLoader.java:404)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)

主要类如下
@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@EntityScan(basePackages="x.y.z")
@EnableJpaRepositories
@EnableTransactionManagement
@EnableAspectJAutoProxy
@EnableScheduling
@EnableAsync
@EnableRetry
@Slf4j
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

最佳答案

发现问题了。这是由于 spring-boot-maven-plugin在 1.5.7 和 2.1.6 版之间重新打包分类器更改 ( see here )

我的 1.5.7 pom spring-boot-maven-plugin配置如下:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
<additionalProperties>
<build.number>${buildNumber}</build.number>
</additionalProperties>
</configuration>
</execution>
</executions>
</plugin>

升级到 spring-boot-maven-plugin:2.2.16 后生成的 list 版本没有正确的 Start-Class .
Manifest-Version: 1.0
Implementation-Title: my-app
Implementation-Version: 2.1.0-SNAPSHOT
Start-Class: org.springframework.boot.loader.JarLauncher
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.1.6.RELEASE
Created-By: Maven Archiver 3.4.0
Main-Class: org.springframework.boot.loader.JarLauncher

更改 spring-boot-maven-plugin:2.2.16以下解决了问题 - jar MANIFEST现在包含正确的 Start-Class .
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>build-info</goal>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
<additionalProperties>
<build.number>${buildNumber}</build.number>
</additionalProperties>
</configuration>
</execution>
</executions>
</plugin>

正确 MANIFEST :
Manifest-Version: 1.0
Implementation-Title: my-app
Implementation-Version: 2.1.0-SNAPSHOT
Start-Class: my.app.MainClass
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.1.6.RELEASE
Created-By: Maven Archiver 3.4.0
Main-Class: org.springframework.boot.loader.JarLauncher

该应用程序现在可以正常启动。

关于java - SpringBoot 2 (2.1.6.RELEASE) StackOverFlowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57090168/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com