近期公司WEB项目在本地Idea中突然无法启动,一直卡在初始化阶段,也没有任何报错信息。
八月 05, 2022 4:28:30 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
新建项目重新从代码库拉取也是一样的现象,并且其他同事和测试环境都可以正常启动,同样的代码和配置。
网上搜索的结果大多是说数据库连接参数配置错误,可我的配置和同事的完全一样,并且我的DBeaver也是同样的配置,都可以访问,所以不可能是数据库连接参数的问题。
还有说是mybatis的mapper.xml里面的id重复、返回类型设置错误等问题造成的,可是项目中mapper那么多。。。
困扰了好几天,一直没有解决,在启动其他模块时终于发现了问题所在。
该项目为传统ssm项目,未使用springboot。分为core、impl、operation、prepose、schedule五个模块,其中core和impl是公共模块,另外3个是应用模块。
分别启动时发现,operation和schedule在提示初始化spring容器后控制台没有任何输出,也无法访问。而prepose在提示初始化spring容器后,一直刷屏警告,其中一行如下:
大意是创建sqlSessionFactory时异常,因为某个mapper.xml解析失败,解析失败的原因是里面的BaseResultMap已存在,但是该xml中只有一个BaseResultMap,由于引入了mybatis-generator,暂不确定启动时会不会重复生成,但是该mapper为拷贝其他模块产生的废代码,直接删除,自此所有模块都可以正常启动!!
另外,为什么prepose可以看到错误日志,而另外2个看不到呢,是因为这2个模块logback.xml的配置问题,为了避免刷屏,部分框架类的日志级别设置为error,而从上图可以看到bean创建失败只是warn级别。一般的bean创建失败warn也就罢了,sqlSessionFactory这么重要的bean创建失败,项目都无法启动,居然也只是warn级别!!所以需要把org.springframework的日志级别改为warn!