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

时间:2019-02-05 21:01:48

标签: spring-boot

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

  
     

申请无法开始

     
     

说明:

     

以null定义的bean'xxxRepository'不能为   注册。具有该名称的Bean已被定义为null和   覆盖已禁用。

     

操作:

     

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

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

这似乎与this change有关:

  

Bean覆盖

     

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

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

3 个答案:

答案 0 :(得分:2)

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

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

在检查了@Configuration类之后,我们两次扫描包含我们存储库的软件包,对不同类的相同软件包分别使用@ComponentScan@EnableJpaRepository:一次过滤@ComponentScan.Filter,一次不过滤。

删除第二个组件扫描即可解决此问题。

答案 1 :(得分:1)

我以前见过这个错误,我有一个用@Component或@Repository或@Service注释的类,并且在配置类中也注册为@Bean。难道你的情况也是这样吗?

答案 2 :(得分:0)

我遇到了类似的问题,但这仅带有@NotNull批注。当我升级弹簧时,它停止工作了。我尝试了很多在SO中找到的东西,但是对我唯一起作用的是消除数据库并再次运行spring。我知道那很烂,但是没有找到其他解决方案。

祝你好运!