为了账号安全,请及时绑定邮箱和手机立即绑定

由于相同的 bean,应用程序无法启动

由于相同的 bean,应用程序无法启动

慕雪6442864 2023-06-04 16:58:00
我有一个Spring Webflux应用程序,我试图从旧模块加载依赖项(旧模块在Spring WebMVC框架上)。启动应用程序时,会抛出此错误 -***************************APPLICATION FAILED TO START***************************Description:The bean 'requestMappingHandlerAdapter', defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class] and overriding is disabled.Action:Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true我想要启动 webflux 包中的所有 bean,所以我不能设置spring.main.allow-bean-definition-overriding=true.还尝试在组件扫描时排除 org.springframework.boot 中的所有类 - @ComponentScan(excludeFilters = @Filter(type = FilterType.REGEX, pattern = "org.springframework.boot*")。还尝试像这样排除我的 webflux 项目的 pom.xml 中的所有 spring 包 - <exclusion>    <groupId>org.springframework</groupId>    <artifactId>spring-core</artifactId></exclusion>由于我无法将旧的依赖项项目修改为 webflux,是否有任何选项可以使代码正常工作?
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

在您的 Spring Boot 启动类中,@EnableAutoConfiguration注释将自动配置 MVC 部分(WebMvcAutoConfiguration由于相同的 bean 名称将失败DelegatingWebFluxConfiguration)


所以尝试像这样从自动配置中排除它:


@SpringBootApplication

@EnableAutoConfiguration(exclude = {WebMvcAutoConfiguration.class })

public static void main(String[] args) {

    ...

    SpringApplication.run(MyApp.class, args);

}


查看完整回答
反对 回复 2023-06-04
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

如您的问题描述中所述,在 Spring Webflux 中使用 Spring MVC 的依赖项可能会导致此问题。我通过排除组“org.springframework.boot”同时包含旧的依赖项解决了这个问题。

在 gradle.build 我做了类似下面的事情:

implementation("dependency-using-spring-mvc") {
    exclude(group= "org.springframework.boot")
}


查看完整回答
反对 回复 2023-06-04
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

如果我理解正确,你在类路径上有一些与 Web 相关的依赖项,但没有构建 Web 应用程序,你可以明确地告诉SpringApplication你不需要 Web 应用程序:

app.setWebEnvironment(false);

这是禁用与 Web 相关的自动配置的方法,因为这意味着您不需要知道那些自动配置类是什么,让 Spring Boot 为您处理。


查看完整回答
反对 回复 2023-06-04
  • 3 回答
  • 0 关注
  • 235 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信