猿问

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

我有一个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,是否有任何选项可以使代码正常工作?


慕雪6442864
浏览 236回答 3
3回答

qq_遁去的一_1

在您的 Spring Boot 启动类中,@EnableAutoConfiguration注释将自动配置 MVC 部分(WebMvcAutoConfiguration由于相同的 bean 名称将失败DelegatingWebFluxConfiguration)所以尝试像这样从自动配置中排除它:@SpringBootApplication@EnableAutoConfiguration(exclude = {WebMvcAutoConfiguration.class })public static void main(String[] args) {&nbsp; &nbsp; ...&nbsp; &nbsp; SpringApplication.run(MyApp.class, args);}

慕盖茨4494581

如您的问题描述中所述,在 Spring Webflux 中使用 Spring MVC 的依赖项可能会导致此问题。我通过排除组“org.springframework.boot”同时包含旧的依赖项解决了这个问题。在 gradle.build 我做了类似下面的事情:implementation("dependency-using-spring-mvc")&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;exclude(group=&nbsp;"org.springframework.boot") }

小怪兽爱吃肉

如果我理解正确,你在类路径上有一些与 Web 相关的依赖项,但没有构建 Web 应用程序,你可以明确地告诉SpringApplication你不需要 Web 应用程序:app.setWebEnvironment(false);这是禁用与 Web 相关的自动配置的方法,因为这意味着您不需要知道那些自动配置类是什么,让 Spring Boot 为您处理。
随时随地看视频慕课网APP

相关分类

Java
我要回答