1、Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
这是编译后找不到静态资源的问题,会出现各种情况,包括无法访问xx.html页面、只有页面没有css效果等。都是某一些静态资源没有被编译到target中,下图每个部分都有可能出现没有被加载到target的情况出现,比较经常碰到的是箭头所示的templates中xx.html、static中css、js等:
网上几个比较典型的解决办法有:
a、在application.properties中配置如下(或配置更多内容):
b、在pom.xml中配置resources位置:
该方法似乎重新指定了资源文件的位置,实际在springboot配置中已经指定了编译资源位置:
c、在application.yml中配置static静态资源模板(位置)
d、还有诸多许多其他方法。但对本工程都无效。
最后找到一个有效解决方法:
编写一个配置类,如:WebConfig
@Configurationpublic class WebMVCConfig implements WebMvcConfigurer {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
}
}
再重新编译,target中所有资源都有存在,完美解决。
注:以上提到的其他方法仅对本项目无效,并不指无用。
===============================2022.03.31==================================
2、Error creating bean with name 'sqlSessionFactory' defined in class path.........
在springboot项目结构连接数据库时,用了mybatis,注入时一直提示错误,在调试时发现托管给spring的mapper实例和serviceImpl实例一直为null,报空指针异常,在测试环境中也是如此:
而启动整个springboot项目会报Error creating bean with name 'xxxxxx' defined in class path.........
(xxxxxx会迭代cause by,出现多个),也就是无法创建某个bean。
后经排错,是vo层(也叫po、pojo等)创建了一个类Collection与java.util.Collection冲突导致,将该类改名项目正常运行。而至于为何这个错误会导致bean无法生成,还不清楚。。
总结:起类名、文件名一定要注意避开一些可能已经被Java使用的词。
还有一个小点:spring项目中测试环境要使用项目下的资源需要使用@RunWith注解,否则项目就算正常运行但测试环境依然可能报空:
后经验证,不仅是名称冲突会导致创建bean失败,许多其他原因也会导致这个错误的出现,例如:
xxx.xml中的namespace错误也会导致无法创建bean(假设红框中几个字母没写):
================================2022.04.07=================================