spring-boot之从 2.0.6 升级到 Spring Boot 2.1.2 会导致存储库错误

qq78292959 阅读:167 2025-06-02 22:19:02 评论:0

我尝试将工作应用程序从 Spring Boot 2.0.6 升级到 2.1.2。在此更改之后,我在测试中遇到了一些麻烦,但最终解决了这个问题。我可以从 NetBeans (mvn clean install) 成功构建应用程序。但是,当我尝试使用 mvn spring-boot:run 从命令行运行时,我得到的是:


APPLICATION FAILED TO START


Description:

The bean 'xxxRepository', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

有趣的是,每次我尝试运行它时,错误都在不同的存储库中,但总是显示相同的消息。

这似乎与 this change 有关:

Bean Overriding

Bean overriding has been disabled by default to prevent a bean being accidentally overridden. If you are relying on overriding, you will need to set spring.main.allow-bean-definition-overriding to true.

鉴于它显然影响了我所有的存储库,我猜测某处存在配置问题。我可以按照建议的操作进行操作,但实际上并没有什么不同。问题是我不知道要更改配置以使其再次正常工作。我什至不确定要发布与该问题相关的内容。关于如何解决这个问题的任何想法?

请您参考如下方法:

我们从 Spring Boot 2.0.x 升级到 2.1.x 时遇到了这个问题。

我可以通过允许使用 spring.main.allow-bean-definition-overriding: true 覆盖 bean 定义来“解决”这个问题。但感觉像是隐藏了根本原因。 事实上,bean 定义覆盖曾经用来隐藏我们这边的糟糕配置。

在检查了我们的 @Configuration 之后我们使用 @ComponentScan 两次扫描包含我们存储库的包的类和 @EnableJpaRepository在来自不同类的相同包上:一次使用过滤器 @ComponentScan.Filter ,一次没有。

删除第二个组件扫描解决了这个问题。


标签:Spring
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号