美文网首页SpringBoot程序员IT@程序员猿媛
Springboot 集成 Mybatis,不同package下

Springboot 集成 Mybatis,不同package下

作者: 若书R | 来源:发表于2019-04-01 10:58 被阅读14次

    Mybatis不同包里出现了同名类,启动时报错如下:

    org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'sysSetMapper' for bean class [com.onlyas.appserver.dao.SysSetMapper] conflicts with existing, non-compatible bean definition of same name and class [com.onlyas.appserver.dao.dbo.SysSetMapper]
    

    通过查看Spring源码得知,当我们使用注解创建bean时,spring使用了AnnotationBeanNameGenerator来创建bean的名称。
    解决方案:自己写一个Generator吧。如下:

    @SpringBootApplication
    @ComponentScan(nameGenerator = MultidataApplication.SpringBeanNameGenerator.class)
    public class MultidataApplication {
    
        public static class SpringBeanNameGenerator extends AnnotationBeanNameGenerator {
            @Override
            protected String buildDefaultBeanName(BeanDefinition definition) {
                return definition.getBeanClassName();
            }
        }
    
        public static void main(String[] args) {
            SpringApplication.run(MultidataApplication.class, args);
        }
    
    }
    

    Mybatis的MapperScan里新增:

    nameGenerator = MultidataApplication.SpringBeanNameGenerator.class
    

    示例:

    @MapperScan(basePackages="com.onlyas.appserver.dao", nameGenerator = MultidataApplication.SpringBeanNameGenerator.class)
    

    好了,这样再运行起来就不会报错了。

    相关文章

      网友评论

        本文标题:Springboot 集成 Mybatis,不同package下

        本文链接:https://www.haomeiwen.com/subject/fivmbqtx.html