问题描述

在项目中集成mybatis-plus以后,项目在开发工具中可以正常启动,本地和前端愉快的调试。但是用docker部署启动时出现问题。报错信息如下,这种情况下,是不是有点懵逼了。都调试好了,快要上线,结果docker部署不了?那应该是jar出的问题

以下摘录docker 报错信息

[org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is java.lang.IllegalArgumentException: name
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
        ... 65 common frames omitted
Caused by: java.lang.IllegalArgumentException: name
        at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:693) ~[na:1.8.0_181]
        at sun.misc.URLClassPath.findResource(URLClassPath.java:215) ~[na:1.8.0_181]
        at java.net.URLClassLoader$2.run(URLClassLoader.java:569) ~[na:1.8.0_181]
        at java.net.URLClassLoader$2.run(URLClassLoader.java:567) ~[na:1.8.0_181]
        at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_181]
        at java.net.URLClassLoader.findResource(URLClassLoader.java:566) ~[na:1.8.0_181]
        at org.springframework.boot.loader.LaunchedURLClassLoader.findResource(LaunchedURLClassLoader.java:78) ~[jcz-zhihui-1.0.0-SNAPSHOT.jar:na]
        at java.lang.ClassLoader.getResource(ClassLoader.java:1096) ~[na:1.8.0_181]
        at org.springframework.core.io.ClassPathResource.resolveURL(ClassPathResource.java:155) ~[spring-core-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
        at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:193) ~[spring-core-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
        at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:498) ~[spring-core-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
        at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:298) ~[spring-core-5.2.6.RELEASE.jar!/:5.2.6.RELEASE]
        at com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties.getResources(MybatisPlusProperties.java:203) ~[mybatis-plus-boot-starter-3.1.0.jar!/:3.1.0]
        at com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties.lambda$resolveMapperLocations$0(MybatisPlusProperties.java:197) ~[mybatis-plus-boot-starter-3.1.0.jar!/:3.1.0]
        at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:267) ~[na:1.8.0_181]
        at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:1.8.0_181]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_181]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_181]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:545) ~[na:1.8.0_181]
        at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) ~[na:1.

问题背景

mybatisplus依赖如下版本

    compile('com.baomidou:mybatis-plus-boot-starter:3.1.0')
    compile('com.baomidou:mybatis-plus-generator:3.1.0')

问题分析

报错提示是没有sqlSessionFactory,按照springboot的尿性,在启动时只要正常配置application.yml,使用推荐的连接池,sqlSessionFactory就自动创建了,mybatis也会自动获取啊。难道mybatisplus和mybatis有点区别,既然缺少sqlSessionFactory,那就看源码呗,看怎么能把 sqlSessionFactory 搞定。

spring:
  datasource:
    url: jdbc:mysql://0000:00/test?nullNamePatternMatchesAll=true&tinyInt1isBit=false&useSSL=false&nullCatalogMeansCurrent=true
    username: 123
    password: 123
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      minimum-idle: 5                    # 最小空闲连接数量
      idle-timeout: 180000               # 空闲连接存活最大时间,默认600000(10分钟)
      maximum-pool-size: 10              # 连接池最大连接数,默认是10
      auto-commit: true                  # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
      pool-name: authPool                # 连接池名
      max-lifetime: 1800000              # 此属性控制池中连接的最长生命周期,默认1800000即30分钟
      connection-timeout: 30000          # 数据库连接超时时间,默认30秒,即30000
mybatis-plus:
  global-config:
    db-config:
      id-type: auto
      field-strategy: not_empty
      table-underline: true
      db-type: mysql
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations: classpth:/mapper/**Mapper.xml

源码分析

就是这块的坑,自动配置没搞定,然后就报错了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0fVJ32yn-1605853770251)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1605843175481.png)]

在这里插入图片描述

问题解决

1、自己搞个sqlsessionFactory,这种解决办法是个掩耳盗铃的摸鱼搞法

2、定位到下面位置时,去看了源码。好吧,spring boot中,凡是配置还是复制以前的吧,不然坑是填不完的

mapper-locations路径错了

    at com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties.getResources(MybatisPlusProperties.java:203) ~[mybatis-plus-boot-starter-3.1.0.jar!/:3.1.0]
    at com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties.lambda$resolveMapperLocations$0(MybatisPlusProperties.java:197) ~[mybatis-plus-boot-starter-3.1.0.jar!/:3.1.0]
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐