当先锋百科网

首页 1 2 3 4 5 6 7

使用SpringBoot devtools热部署功能,Mybatis出现无法找到映射文件的错误提示,导致无法启动web服务器

错误提示:
Caused by: java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [mapper/]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
    at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1363) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
    at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1023) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
    at org.springframework.core.io.ClassPathResource.resolveURL(ClassPathResource.java:155) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
    at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:193) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
    at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:497) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
    at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:298) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
    at org.mybatis.spring.boot.autoconfigure.MybatisProperties.getResources(MybatisProperties.java:191) ~[mybatis-spring-boot-autoconfigure-2.0.0.jar:2.0.0]
    at org.mybatis.spring.boot.autoconfigure.MybatisProperties.lambda$resolveMapperLocations$0(MybatisProperties.java:185) ~[mybatis-spring-boot-autoconfigure-2.0.0.jar:2.0.0]

问题原因:
关键字不能加载[mapper/]。
springBoot 使用了spring-boot-devtools,热部署后加载mybatis映射文件找不到对应目录造成的

两个解决方法:
第一个禁用热加载
pom.xml里面的这个可以不改
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
application.properties配置对应属性为false
spring.devtools.restart.enabled=false

第二个解决方法为

只需要设application.properties
mybatis.mapperLocations=classpath*:mapper/*.xml
使用classpath*:替换之前的classpath:来告诉spring查找所有classpath