springboot报错“The bean ‘xxx‘, defined in class path resource [xxx] has already been defined”

报错内容大概如下
原因:往spring容器中的重复注入了【xxx】bean类

很多网上的搜索都是说jar包或依赖冲突,这里主要不说这个类型
很多时候对新手来说也可能是多次注入

比如:
定义了一个service类

@Service
public class CustomWebSocketHandler extends TextWebSocketHandler implements WebSocketHandler {  }

引用时

@Bean
    // 此处不需要用@Bean注解,因为CustomWebSocketHandler类已经存在@Service注解,已经放入了spring容器
    public WebSocketHandler customWebSocketHandler() {
        return new CustomWebSocketHandler();
    }

包括的其他类型还有比如:@Component 、@Controller等注解其实都是往spring容器中注入了类,所以在引用时千万不要再添加其它会注入容器的注解。

那假如是jar包冲突,那就应该在maven依赖或者gradle依赖中去除相关冲突依赖
在maven依赖中去除相关的包使用exclusions

<dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-seataartifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.seatagroupId>
                    <artifactId>seata-spring-boot-starterartifactId>
                exclusion>
            exclusions>
        dependency>

在gradle中使用exclude

testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }

你可能感兴趣的:(资源,bug,信息,java,spring,boot,spring,maven,gradle)