我有一个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条答案
按热度按时间g2ieeal71#
在Sping Boot 启动类中,
@EnableAutoConfiguration
注解将自动配置MVC部件(由于DelegatingWebFluxConfiguration
中的bean名称相同,WebMvcAutoConfiguration
将失败)因此,尝试从自动配置中排除此选项,如下所示:
ocebsuys2#
如果我的理解正确,您在类路径上有一些与Web相关的依赖项,但是没有构建Web应用程序,那么您可以显式地告诉
SpringApplication
您不需要Web应用程序:这是禁用Web相关的自动配置的方法,因为这意味着您不需要知道这些自动配置类是什么,并且让Sping Boot 来为您处理。
z31licg03#
正如您在问题描述中提到的,在Spring Webflux中使用Spring MVC的依赖项可能会导致这个问题。我已经通过排除组“org.springframework. Boot ”而包含旧的依赖项来解决这个问题。
在www.example.com中gradle.build我做了如下操作: