首页 > 解决方案 > 从 2.0.6 升级到 Spring Boot 2.1.2 会导致存储库错误

问题描述

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


应用程序无法启动


描述:

无法注册在 null 中定义的 bean 'xxxRepository'。已在 null 中定义了具有该名称的 bean,并且禁用了覆盖。

行动:

考虑重命名 bean 之一或通过设置 spring.main.allow-bean-definition-overriding=true 来启用覆盖

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

这似乎与这种变化有关:

Bean 覆盖

默认情况下禁用 Bean 覆盖,以防止意外覆盖 bean。如果您依赖覆盖,则需要将 spring.main.allow-bean-definition-overriding 设置为 true。

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

标签: spring-boot

解决方案


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

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

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

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


推荐阅读