黑鱼丶 2021-05-19 17:33 采纳率: 45.5%
浏览 115
已结题

springboot创建公共模块引入依赖,部署linux报错

报错信息:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [tk/mybatis/mapper/autoconfigure/MapperAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'URL [jar:file:/home/war/spring/fanli/login.jar!/BOOT-INF/lib/common-0.0.1-SNAPSHOT.jar!/mapper/AccountMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.wst.common.mapper.AccountMapper.BaseResultMap

引用公共模块报错,就算没用到公共模块里面的东西也会报错

  • 写回答

3条回答 默认 最新

  • 黑鱼丶 2021-05-20 09:42
    关注

    找到原因了

    mapper-locations: classpath:mapper/*.xml,classpath*:mapper/*.xml
    
    classpath和classpath*区别: classpath:只会到你的class路径中查找找文件。 classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。 这两者后面的通配符都能起作用,只是范围不同。
    

    因为配置了

    classpath*:mapper/*.xml

    我的理解是因为classpath*,找mapper时会去\BOOT-INF\lib\找jar包中的mapper同时也会去\BOOT-INF\classes\找,因为引入了公共依赖jar,其中也包含mapper,此时就会出现两个同名的.xml所以报错重复BaseResultMap,将classpath的*去掉后问题解决了

    但实际上class下并没有包含mapper相关,看似解决了但并没有完全解决,有懂得还请指导下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月22日
  • 已采纳回答 10月14日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分