Spring Boot 3.2.x迁移时solRepository Bean名称冲突问题排查
针对你遇到的ConflictingBeanDefinitionException,即使修改接口名称、指定@Repository名称后仍无法解决,核心成因可能有以下几点:
MyBatis扫描器误处理JPA Repository接口
错误日志中出现mybatis-spring的ClassPathMapperScanner,说明MyBatis的Mapper扫描逻辑错误将你的SolRepository(JPA Repository接口)当成了MyBatis Mapper接口,试图为它创建Bean定义。而Spring Data JPA本身也会通过JpaRepositoryFactoryBean为该接口生成Bean,两者同名(solRepository)且类型不兼容,因此触发冲突。Spring Boot 3.2扫描规则的变更
Spring Boot 3.2.x对组件扫描、自动配置的范围做了调整,导致原本在3.1.x中不会重叠的JPA Repository扫描与MyBatis Mapper扫描范围出现重叠。同时你使用的mybatis-spring 3.0.3可能和Spring Boot 3.2.x存在兼容性细节问题,进一步放大了这个冲突。扫描注解的范围重叠配置
如果项目中同时配置了@EnableJpaRepositories和@MapperScan,且两者的basePackages参数设置有重叠,就会导致同一个接口被两个扫描器重复处理。即使你修改接口名称或指定@Repository的name属性,只要扫描范围的重叠问题没解决,两个扫描器依然会针对新名称生成冲突的Bean定义。
你提供的错误日志:
org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'solRepository' for bean class [...repository.solRepository] conflicts with existing, non-compatible bean definition of the same name and class [org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean] at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate(ClassPathBeanDefinitionScanner.java:361) ~[spring-context-6.1.5.jar:6.1.5] at org.mybatis.spring.mapper.ClassPathMapperScanner.checkCandidate(ClassPathMapperScanner.java:345) ~[mybatis-spring-3.0.3.jar:3.0.3] ...
内容的提问来源于stack exchange,提问作者anothercoder

