【Java】SpringBoot 中ElasticsearchRepository 和 @Mapper 注册Bean冲突如何解决

如题所述,我用到了Elasticsearch + mybatis,集成的时候,出了个问题,先上图

【Java】SpringBoot 中ElasticsearchRepository 和 @Mapper 注册Bean冲突如何解决

如图所示,这里我同时用到了@Mapper和ElasticsearchRepository,可问题就出在这,因为我用的mybatis习惯用注解来写,而网上的Elasticsearch教程都是dao层继承这个ElasticsearchRepository ,现在两个映射的时候冲突了,允许时会出现这个错误

【Java】SpringBoot 中ElasticsearchRepository 和 @Mapper 注册Bean冲突如何解决

说的是articleDao 已经被注册为bean了,不能再次注册,然后下面Action有个建议,我照着把spring.main.allow-bean-definition-overriding=true 加上,这个问题是解决了,但事情并没有结束,又有新的错,我把错误贴一下

【Java】SpringBoot 中ElasticsearchRepository 和 @Mapper 注册Bean冲突如何解决

【Java】SpringBoot 中ElasticsearchRepository 和 @Mapper 注册Bean冲突如何解决

第一句完整的错误描述是这样的

Error creating bean with name 'articleController': Unsatisfied dependency expressed through field 'articleService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'articleService': Unsatisfied dependency expressed through field 'articleDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleDao': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property search found for type Article!

另外,如果单独使用 ElasticsearchRepository ,是没有问题的

【Java】SpringBoot 中ElasticsearchRepository 和 @Mapper 注册Bean冲突如何解决

注 项目环境为SpringBoot 2.1.1.RELEASE ,elasticsearch 依赖为 spring-boot-starter-data-elasticsearch,同2.1.1.RELEASE

我不知道是因为加了

spring.main.allow-bean-definition-overriding=true 才出的这个问题,还是重复注册bean的问题解决了,而这是下一个问题,有遇到过相关问题的大佬请帮助下

回答

@Mapper换成@Repository
@Mapper是mybatis的注解,由mybatis处理,放到其他类上可能和spring data的注解有冲突

mybatis 可以不用 @Mapper 注解。在 Application 上加mapper扫描器 @MapperScan("com.abcd.mapper")

最后解决了没有?好奇

以上是 【Java】SpringBoot 中ElasticsearchRepository 和 @Mapper 注册Bean冲突如何解决 的全部内容, 来源链接: utcz.com/a/87775.html

回到顶部