我试图将运行中的应用程序从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。
鉴于它显然影响了我的所有存储库,我的猜测是某处存在配置问题。我可以按照建议的操作进行操作,但实际上没有任何作用。问题是我不知道要在配置中进行哪些更改才能使此功能再次起作用。我什至不确定要发布与该问题有关的内容。关于如何解决这个问题的任何想法?
答案 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。我知道那很烂,但是没有找到其他解决方案。
祝你好运!