(后来我又碰到了几回这个错误,是关于配置log4j时候报的错,最后查出同样是由于jar包冲突,所以大家要是遇到相似的问题,可以冲这方面入手一下)
最近搭建一个SSM+activiti工作流的一个项目,搭建成功后可以成功启动,但是访问出错,在执行查询语句的时候回执行失败
java.lang.AbstractMethodError:org.mybatis.spring.transaction.SpringManagedTra
后来查找后发现是mybatis-spring的版本太低了,mybatis版本在3.4以上,需要mybatis-spring对应的版本为1.3以上这个是mybatis官方的介绍文档,有兴趣的朋友可以自行查找相关资料 mybatis官方资料
根据文档我把mybatis-spring 的版本升级了一下
然后噩梦就开始了
紧接着项目就一直启动不了,也不报错,只是在tomcat的log控制台上打印了这句话
org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [ROOT] registered the JDBC driver but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered
然后各种百度都没有解决问题,有的是直接注释掉tomcat的监听器,但是这种治标不治本的办法也没法采用,然后又查到可以自己写监听器或者数据源来自己关闭,尝试过后也没有办法解决这个问题。
最后换了个思路,可能会是其他的jar版本之间有冲突导致,然后将spring 和 activiti 都换了一次版本,将spring采用的版本为4.1.6,activiti的版本改为5.22.0,之后再次启动终于报了另一个错误
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
此时就算是看到了这个错误也头一次感到这个错误报的好啊,终于不再是jdbc驱动程序被强制注销这个错误了 [笑哭]
后来发现这个错误是由于idea没有将修改后的jar发布出去,导致具体步骤如下
Ctrl+Alt+Shift+S弹出Project Structure窗口,在Artifacts选项到Output Layout标签中找到Available Elements
点击Put into Output Root,执行后,在WEB-INF会增加lib目录,里面是项目引用的jar包,点击OK。再次部署应用就能成功运行了。
紧接着启动中又报错
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.mchange.v2.c3p0.ComboPooledDataSource] for bean with name ‘dataSource’ defined in file [F:\FileRecv\jinzunyunpingtai\target\jinzunyunpingtai\WEB-INF\classes\applicationContext-public.xml]; nested exception is java.lang.ClassNotFoundException: com.mchange.v2.c3p0.ComboPooledDataSource
看样子应该是c3p0的jar版本又不太适用了
上maven库找了一下发现两个c3p0
大家要选择上面这个的版本,修改c3p0的版本后终于成功启动。
历时两天终于解决完了这个错误。记录一下自己的成长。