spring-boot - 从 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 2.0.x 升级到 2.1.x 时遇到了这个问题。
我可以通过允许 bean 定义覆盖来“解决”这个问题,spring.main.allow-bean-definition-overriding: true
但感觉就像隐藏了根本原因。
事实上,bean 定义覆盖用于隐藏我们这边的糟糕配置。
在检查了我们的@Configuration
类之后,我们扫描了包含我们的存储库的包两次,使用来自不同类的相同包:一次使用过滤器@ComponentScan
,一次没有。@EnableJpaRepository
@ComponentScan.Filter
删除第二个组件扫描解决了这个问题。
推荐阅读
- javascript - 如何获取以 MySQL 开头的数据
- typescript - MiniCSSExtractPlugin - 模块解析失败。SCSS 编译期间出现意外字符“”
- php - Magento 2 任务“更新 x 选定产品的属性”:x 项当前正在更新。x 项已安排更新
- javascript - 需要有关 JavaScript 和 AJAX 的帮助
- javascript - 在 Angular 但没有 @ViewChild 的情况下查询 Dom 元素(DIV id 或类)
- frameworks - 2021 年最流行的开发语言和框架是什么?
- python - 变量在 Pycharm 调试器中不可用
- r - 使用 rvest 从主页获取 href(SelectorGadget 和检查源代码)
- r - dplyr 中 mutate 和 select 的组合 - 结果的列名问题
- postgresql - 升级到版本 11 后 Postgres 查询产生高磁盘 IO