springboot整合mybatis报 NO qualifying bean of type 'com.jvtd.mapper.auth.AdminUserMapper' 把我坑了1天

版权声明:欢迎转载,注明出处即可,谢谢! https://blog.csdn.net/qq_17231297/article/details/82219502

2018-08-30 11:35:35.707 WARN 6920 — [ main] o.s.b.f.s.DefaultListableBeanFactory : Bean creation exception on non-lazy FactoryBean type check: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘adminUserMapper’ defined in file [D:\jvtd_operation\op-plal\target\classes\com\jvtd\mapper\auth\AdminUserMapper.class]: Unsatisfied dependency expressed through bean property ‘sqlSessionFactory’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration’: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘mybatis-org.mybatis.spring.boot.autoconfigure.MybatisProperties’: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration’: Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry’ available
2018-08-30 11:35:35.713 DEBUG 6920 — [ main] o.s.b.d.LoggingFailureAnalysisReporter : Application failed to start due to an exception

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.jvtd.mapper.auth.AdminUserMapper’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1506)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:507)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:485)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor R e s o u r c e E l e m e n t . g e t R e s o u r c e T o I n j e c t ( C o m m o n A n n o t a t i o n B e a n P o s t P r o c e s s o r . j a v a : 619 ) a t o r g . s p r i n g f r a m e w o r k . b e a n s . f a c t o r y . a n n o t a t i o n . I n j e c t i o n M e t a d a t a InjectedElement.inject(InjectionMetadata.java:177)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1341)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:572)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda d o G e t B e a n 0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1135)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:507)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:485)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor R e s o u r c e E l e m e n t . g e t R e s o u r c e T o I n j e c t ( C o m m o n A n n o t a t i o n B e a n P o s t P r o c e s s o r . j a v a : 619 ) a t o r g . s p r i n g f r a m e w o r k . b e a n s . f a c t o r y . a n n o t a t i o n . I n j e c t i o n M e t a d a t a InjectedElement.inject(InjectionMetadata.java:177)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1341)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:572)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda d o G e t B e a n 0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:398)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:330)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1258)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246)
at com.jvtd.config.OpPlalApplication.main(OpPlalApplication.java:16)

2018-08-30 11:35:35.716 ERROR 6920 — [ main] o.s.b.d.LoggingFailureAnalysisReporter :


APPLICATION FAILED TO START


Description:

A component required a bean of type ‘com.jvtd.mapper.auth.AdminUserMapper’ that could not be found.

Action:

Consider defining a bean of type ‘com.jvtd.mapper.auth.AdminUserMapper’ in your configuration.
这个问题把我整整搞了一天,把我坑的一逼,耽误的一天时间什么也没干

先说说我第一天解决问题的思路:
1.首先检查spring的启动类Application类是不是有问题,这个application,最好放在根包(根包就是指的com.**)文件加的外层(这样最好)
这里写图片描述
为什么最好这样放呢?
因为application启动只能扫描到该包及其子包中的类,否则整个启动都会有问题。
如果application类放到根包的一个包中,例如:
这里写图片描述
那么这个情况启动application类机会报错,这个时候需要在启动类加注解
这里写图片描述
2.检查启动类是否加了mapperScan
这里写图片描述
加这个注解主要是为了扫描到mapperjava文件。
还有种可以扫描到文件的方式就是在*mapper.java类上家mapper注解
这里写图片描述

这个注解只有在1.0.0以上的版本才会有,包含1.0以及以下都是没有的。

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
 </dependency>

3.查看这里写图片描述
这个配置文件中是否有以下内容
这里写图片描述
这个主要是配置xml文件的路径

4.以上2,3条是必须的,缺一不可

5.以上工作都做了,还是报找不到mapper接口类,诡异
6.由于idea特殊性,放在java文件下的xml文件是不会本编译到classes下的
这里写图片描述
我怀疑是不是这个原因导致的,确认了,编译文件classes下确实没xml文件啊,怎么办呢?
解决办法:
这里写图片描述

       <resources>
            <!--打包时将jsp文件拷贝到META-INF目录下 -->
            <resource>
                <!--指定resources插件处理哪个目录下的资源文件 -->
                <directory>src/main/webapp</directory>
                <!--注意此次必须要放在此目录下才能被访问到 -->
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>**/**</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/**</include>
                </includes>
                <filtering>false</filtering>
            </resource>

这样一看,xml文件生成到了classes,想着没问题了,还是报错啊

备注:xml文件放到resource下就不需要以上配置了啊。

7.明天再说吧
8.第二天琢磨了下,是不是jar冲突了,果然是。
我先说说我的问题啊
我的spring-boot-starter-parent,最高版本的

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.0.4.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
</parent>

而我的mybatis-spring-boot-starter用的1.0,

<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.0.0</version>
</dependency>

mybatis-spring-boot-starter太低了,怎么和最高的兼容呢?

立马把mybatis-spring-boot-starter替换成1.3.2

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

启动成功,不报错了啊。

你非要使用mybatis-spring-boot-starter替换成1.0.0,那么你的spring-boot-starter-parent必须调到低版本.例如:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.19.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

 <dependency>
     <groupId>org.mybatis.spring.boot</groupId>
     <artifactId>mybatis-spring-boot-starter</artifactId>
     <version>1.0.0</version>
</dependency>

上面这样也是可以的。

总结经验:

1.遇上类似问题,不要反复看自己的配置,一般都是没问题的,那么简单。
2.遇上报错的问题要往版本不一致或者冲突想。
3.不论使用springboot还是其他软件,高版本的springboot (目前最高2.0.4),那么你的mybatis-spring-boot-starter 尽量使用高版本的(目前最高1.3.2).总结一句:高版本的配套其他jar也用相对较高的,低版本的配套其他jar也用相对较低的,这样比较兼容。

内容吃饭前着急的写的,有点乱,希望给大家启发。

欢迎大家加入Java高级架构/互联网(严禁培训机构、广告群,最干净的技术交流群):614527642
微信平台本人收集个大量资源(4000G架构资源),只做分享,欢迎大家关注获取,保证免费,非任何机构
更多精彩请扫码关注微信公众号—— 名称:java版web项目 id :java_project
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_17231297/article/details/82219502