Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException Annotation 报错解决

标题# Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException Annotation 报错解决

springboot项目启动报错

前言

以下是本次报错的处理历程,如果你的项目也是在启动时报类名重复,希望我的处理方法对你有用。
报错信息如下

Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'shiroConfig' for bean class [cn.com.compass.web.hanlder.BaseExceptionHandle] conflicts with existing, non-compatible bean definition of same name and class [cn.com.compass.core.hanlder.BaseExceptionHandle]

原因:我的项目中有使用开源项目:compass,我的项目依赖树告诉我项目A依赖项目B,项目B依赖compass,项目通过Jenkins打包部署后就报这个错,其实项目中是没有使用到core这个包的。
首先,我先想到的就是而我在pom文件中对项目B的dependency添加排除compass的依赖但是不知道为什么不生效;
其次,我使用maven-shade-plugin插件对这个类进行单独排除,各种尝试各种查资料,结果项目启动各种报错;
最后我才使用@ComponentScan注解去排除这个类,使用方式如下:

@ComponentScan(basePackages={
    
    "cn.com.compass.core"},
		excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = {
    
    "cn.com.compass.core.handler.BaseExceptionHandler"}))
@SpringBootApplication
public class Application {
    
    

	public static void main(String[] args) {
    
    
		SpringApplication.run(App.class, args);
	}

}

@ComponentScan注解介绍

1、@ComponentScan注解的作用

@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定义包扫描的规则,然后根据定义的规则找出哪些需类需要自动装配到spring的bean容器中,然后交由spring进行统一管理。

说明:针对标注了@Controller、@Service、@Repository、@Component 的类都可以别spring扫描到。

2、@ComponentScan注解属性介绍

2.1 value

指定要扫描的包路径

2.2 excludeFilters(排除规则)

excludeFilters=Filter[] 指定包扫描的时候根据规则指定要排除的组件

2.3 includeFilters(包含规则)

includeFilters =Filter[] 指定包扫描的时候根据规则指定要包含的组件.

注意:要设置useDefaultFilters = false(系统默认为true,需要手动设置) includeFilters包含过滤规则才会生效。

2.4 FilterType属性

FilterType.ANNOTATION:按照注解过滤

FilterType.ASSIGNABLE_TYPE:按照给定的类型,指定具体的类,子类也会被扫描到

FilterType.ASPECTJ:使用ASPECTJ表达式

FilterType.REGEX:正则

FilterType.CUSTOM:自定义规则

useDefaultFilters: 配置是否开启可以对加@Component,@Repository,@Service,@Controller注解的类进行检测, 针对Java8 语法可以指定多个@ComponentScan,Java8以下可以用 @ComponentScans() 配置多个规则

结束语

以上是本次报错的处理历程,如果你的项目也是在启动时报类名重复,希望我的处理方法对你有用。

猜你喜欢

转载自blog.csdn.net/weixin_42717648/article/details/128582047