【问题标题】:Occasional BeanCreationException in Java Spring Boot project built with Gradle使用 Gradle 构建的 Java Spring Boot 项目中偶尔出现 BeanCreationException
【发布时间】:2021-02-05 11:35:13
【问题描述】:

在启动由 Gradle 构建的 Java Spring Boot 单 JAR 应用程序时,有时我会收到 BeanCreationException。我的调查表明它取决于 JAR 文件以及 Gradle 是如何构建它的。大多数情况下(但并非总是)我在 Linux 系统上构建项目时会看到异常。但我从未在 Windows 上构建的 JAR 或从 IntelliJ Idea 运行时重现该问题。

我尝试将工作 JAR 的内容与引发异常的 JAR 进行比较 - 所有 *.class 文件(包括元和资源)都是二进制相等的,唯一的区别是文件存储在 JAR 中的顺序/ZIP 存档。我还尝试在 Windows 上解压失败的 JAR,然后将其重新打包到一个新的 JAR 文件中(使用 7-zip)——应用程序启动时没有任何异常。这种奇怪的解决方法解决了这个问题,但我不想在每次在 linux 机器上构建之后都这样做。

异常建议检查循环引用,因此我尝试用 @Autowired bean 构造函数替换 @Autowired 属性以帮助我找到问题,但这并没有帮助。 stacktrace 没有提到我的任何类,所以我不知道哪个 bean 可能导致该问题。而且由于这个问题只是有时会发生并且可以通过重新打包 JAR 文件来解决,所以我不确定是否存在任何循环引用。

你能帮帮我吗?欢迎任何意见或建议。

JDK:openjdk 8u262 Gradle 5.6 版 Spring Boot 2.3.1

异常信息:

BeanCreationException: Error creating bean with name 'webConfig':
Invocation of init method failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'requestMappingHandlerAdapter' defined in class path resource
[org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: 
Unsatisfied dependency expressed through method 'requestMappingHandlerAdapter' parameter 0;
nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException:
Error creating bean with name 'mvcContentNegotiationManager':
Requested bean is currently in creation: Is there an unresolvable circular reference?

【问题讨论】:

    标签: java spring-boot gradle


    【解决方案1】:

    默认情况下,Spring 管理自己 bean 的生命周期,然后在启动期间安排它们的初始化顺序。

    这里是使用@DependsOn 注释来订购bean 实例的完整示例。

    您也可以在官方Spring documentation找到更多详细信息

    【讨论】:

    • 这里的主要问题是非确定性行为。有时构建正常并且应用程序启动良好,有时构建会产生由于上述异常而无法启动的 JAR。我想找到一种方法,如何使用 gradle 构建 JAR,这在构建 bean 依赖项时不会混淆 Spring。我一直认为 Spring 以一种确定性的方式扫描依赖项,并且不依赖于类文件的顺序,但现在我发现它不是真的。当我解压失败的 JAR 文件,按字母顺序排列文件并将它们打包回来时,Spring 上下文已正确初始化。
    猜你喜欢
    • 2020-04-13
    • 2021-08-01
    • 1970-01-01
    • 2021-11-01
    • 2020-05-16
    • 2012-06-21
    • 2018-09-24
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多