@MapperScan和@ComponentScan一块使用导致冲突的解决

目录
  • @MapperScan和@ComponentScan一块使用冲突
    • 解决方案
      • 方案一
      • 方案二
  • 项目中@MapperScan和@Mapper共存之坑XxxMapper that could not be found.
    • 尝试解决

@MapperScan和@ComponentScan一块使用冲突

项目集成了knief4j

报错:

NoSuchBeanDefinitionException: No qualifying bean of type 'springfox.documentation.schema.TypeNameExtractor'

很明显是容器缺少必须的bean,启动不成功

解决方案

方案一

@MapperScan和@ComponentScan一起使用

1.建一个配置类

启动类不做改变

package com.test.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.test.bean")
public class FileNameUtilsConfig {
}

方案二

启动类做改变,使用@MapperScan一块扫描

@MapperScan(basePackages = {"com.test.mapper","com.test.bean"})

项目中@MapperScan和@Mapper共存之坑XxxMapper that could not be found.

公司项目有个小伙子将项目的日志功能做了优化。今天在pom添加依赖,在启动类上加个注解,然后启动项目突然报了ModuleMapper 找不到。

项目一直是好的,又没有对这个mapper修改。进入ModuleMapper 中发现上面也是有@Mapper注解的

可是为什么容器找不到呢,分析一下刚刚修改的才做,引入依赖加注解,问题可能是注解上的问题,注释掉添加的注解,启动服务正常运行。罪魁祸首就是这个注解。

点解注解发现配置类上有个@MapperScan扫描注入。发现这伙计需要操作数据库。而我接收负责的项目用的是传统的@Mapper注入。

思考:难道在一个项目中@MapperScan和@Mapper不能共存吗?

尝试解决

自己创建一个springboot 项目,开始用@Mapper 注入容器 启动程序。程序正常启动。

停掉服务,将mapp文件上的@Mapper删除 ,将文件移动到mapper文件中,在启动类上添加@MapperScan 扫包注入。正常启动。

现在测试@MapperScan 和@Mapper 分别在不包中测试一下。现在将UserMapper 放在mapper包中, 将UserTokenMapper 放在mapper2包中并添加@Mapper 启动测试。

启动类:

UserMapper :

UserTokenMapper :

启动项目报错:

Description:

Field userTokenMapper in com.wyz.yangyang.member.service.impl.MemberServiceImpl required a bean of type ‘com.wyz.yangyang.member.mapper2.UserTokenMapper' that could not be found.

Action:

Consider defining a bean of type ‘com.wyz.yangyang.member.mapper2.UserTokenMapper' in your configuration.

Disconnected from the target VM, address: ‘127.0.0.1:56527', transport: ‘socket'

Process finished with exit code 1

然后我有测试可@MapperScan 扫描的包中不放mapper 文件,mapper2 中mapper文件都添加@Mapper,发现启动正常。

又测试了@MapperScan 和@Mapper 同在一个包中,启动正常。

在此可以看出 @MapperScan 和@Mapper在不同包中,@Mapper注解失效。

为了项目快速开发,为了以后更好的兼容,我将项目改为@MapperScan 模式,因为一个注解可以配置多个包路径。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决Spring使用@MapperScan问题

    目录 问题场景 问题根源 问题追溯 问题解决 SpringBoot  @MapperScan的注意事项 问题场景 今天小编在MyBatis 整合Spring 的时候,使用到了@MapperScan,在启动期出现了一个错误: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean() 对于这个错误,小编也是倍感无奈,怎么会出现这个错误呢,看一下我的依赖

  • 解决tk mapper 通用mapper的bug问题

    如下所示: <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.isea533.mybatis.mapper"/> <property name="properties"> <value> mappers=tk.mybatis

  • 基于@MapperScan和@ComponentScan的使用区别

    目录 @MapperScan和@ComponentScan区别 @MapperScan和@ComponentScan使用 原因 解决办法 课外拓展 @MapperScan和@ComponentScan区别 今天在撸SpringBoot的时候,突然对注解产生了混淆,@MapperScan和@ComponentScan都是扫描包,二者之间有什么区别呢? 首先,@ComponentScan是组件扫描注解,用来扫描@Controller @Service @Repository这类,主要就是定义扫描的路

  • 解决SpringBoot整合Mybatis扫描不到Mapper的问题

    闲来无事,想学学springboot,开始搭建一个项目,但是一直显示mapper扫描不到的错误: "Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsa

  • @MapperScan和@ComponentScan一块使用导致冲突的解决

    目录 @MapperScan和@ComponentScan一块使用冲突 解决方案 方案一 方案二 项目中@MapperScan和@Mapper共存之坑XxxMapper that could not be found. 尝试解决 @MapperScan和@ComponentScan一块使用冲突 项目集成了knief4j 报错: NoSuchBeanDefinitionException: No qualifying bean of type 'springfox.documentation.sc

  • jQuery 美元符冲突的解决方法

    如下代码: 复制代码 代码如下: jQuery.noConflict(); jQuery(document).ready(function(){ //Your Code.... }); jQuery.noConflict() 的详细介绍: 概述 运行这个函数将变量$的控制权让渡给第一个实现它的那个库,这有助于确保jQuery不会与其他库的$对象发生冲突,在运行这个函数后,就只能使用jQuery变量访问jQuery对象.例如,在要用到$("div p")的地方,就必须换成jQuery(&

  • Android ListView与ScrollView冲突的解决方法总结

    Android ListView与ScrollView冲突的解决方法总结 众所周知ListView与ScrollView都具有滚动能力,对于这样的View控件,当ScrollView与ListView相互嵌套会成为一种问题:  问题一:ScrollView与ListView嵌套导致ListView显示不全面  问题二:ScrollView不能正常滑动 解决方式一: ScrollView+LinearLayout+ListView可以换成ScrollView+LinearLayout+Linear

  • pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)

    有时候我们需要在程序里执行一些cmd命令,使用os或者其它模块中的popen方法去执行 这个问题一般是程序内有输入导致的,这个输入可以是input(),也可以是其它的一些stdin操作(如os.popen实际上会造成输入请求) 本质上就是:使用-w参数(无控制台)打包时程序里不要请求输入 或者,你也可以不用-w参数,手动隐藏控制台! 有一天,我把使用了os.popen方法的python程序用pyinstaller打包成exe(用了无控制台打包参数-w) 双击运行时程序却弹框报错! 我就有点纳闷:

  • 两个jar包下相同包名类名引入冲突的解决方法

    有时候引入的jar包中的包名类名与其他jar包中的包名类名相同,导致程序在编译或运行的时候无法正确引用想要的类, 解决方法就是去掉其中不需要的那个jar包 有一个项目下需要用到OpenCV和javacv,但是javacv中已经包含了另一个版本的的openCV,这与我们需要的OpenCV版本不一致, 但是编译和运行的时候程序引入的是我们不需要的版本 一.查看maven树,以idea为例 找到javacv中的OpenCV项,双击 找到在javacv中OpenCV的坐标 2.修改pom文件 到此这篇关

  • Rainbond的ServiceMesh架构组件端口冲突处理解决

    目录 组件间的通讯问题 方式一:通过HTTP 7层网络治理进行端口复用 方式二:动态变更组件的监听端口 方式三:使用 Kubernetes 原生 Service 治理模式 方式四:使用 Istio 网络治理模式 组件间的通讯问题 在我们部署具有多个服务的分布式业务时,必须要考虑的一点就是如何处理服务之间的通信问题,那么当我们将业务部署到Rainbond 上时,又是如何去处理的呢? Rainbond 开箱即用的ServiceMesh架构默认通过 Sidecar 代理的方式,为我们透明的解决了分布式

  • 模板视图和AngularJS之间冲突的解决方法

    本文实例讲述了模板视图和AngularJS之间冲突的解决方法.分享给大家供大家参考,具体如下: 问题: 在php的mvc视图中,我们需要在加载的过程中 传递一些数据给模板: 如: 这里是某个 controller $data['users'] = {something from databases}; $this->load->view('home/index',$data); 这里是对应的视图 <div ng-controller="loadData"> &l

  • ThinkPHP和UCenter接口冲突的解决方法

    本文分析了ThinkPHP和UCenter接口冲突的解决方法.分享给大家供大家参考,具体如下: 1.引出问题: 在UCenter中存在db和base两个类,恰巧这两个类也存在于ThinkPHP中,因此出现问题是必然的事情. db类:uc_client/lib/db.class.php base类:uc_client/model/base.php 2.问题解决方法: 只要消除"重名"即可解决,因此选择更改UCenter中的名称. 3.实际操作方法: db类: 更改db.class.php

  • innodb_index_stats导入备份数据时报错表主键冲突的解决方法

    故障描述 percona5.6,mysqldump全备份,导入备份数据时报错Duplicate entry 'hoc_log99-item_log_27-PRIMARY-n_diff_pfx01' for key 'PRIMARY' 故障原因 查看了下这个主键应该是MySQL系统库下的系统表innodb_index_stats mysql> show create table innodb_index_stats\G *************************** 1. row ****

随机推荐