java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z
前言
早上回來查看日志,發(fā)現(xiàn)job項目有報錯,發(fā)現(xiàn)是c3p0jar包沖突問題,解決問題過程如下
正文
看報錯日志,RazCourseOpenJob報錯了,這個是上周我寫的代碼,在本地沒報錯,怎么會上線之后報錯了?一看Unknown Source,開始猜測難道引用的方法沒有?然后打開線上項目的lib包路徑,一眼看到有兩個c3p0的jar包,嗯?這就奇怪了,為什么之前都沒報錯?。應(yīng)該是之前沒有用到mybatis,這個項目是第一次用mybatis就報錯了。問題就來了,我用idea本地測試的時候也沒報錯啊。猜測應(yīng)該是在我本機跑的時候用的是最新版的那個jar包,而線上用的是舊的jar包。為什么沒新版本不會覆蓋舊版本?(因為jar包路徑不一樣)
[2018-12-24 02:00:00][pool-54-thread-1][ERROR] com.i61.job.component.JobService.runJob(JobService.java:59) - runJob error,jobId=20181224021829 java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z is abstractat com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.isClosed(NewProxyPreparedStatement.java)at org.apache.ibatis.executor.BaseExecutor.closeStatement(BaseExecutor.java:285)at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:52)at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)at com.sun.proxy.$Proxy33.update(Unknown Source)at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:294)at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63)at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)at com.sun.proxy.$Proxy43.updateNextCourseOrder(Unknown Source)at com.i61.job.service.raz.RazCourseOpenJob.run(RazCourseOpenJob.java:32)at com.i61.job.component.JobService.runJob(JobService.java:49)at com.i61.job.component.JobInit$1.run(JobInit.java:62)at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)既然是jar包沖突,那就來解決吧
idea打開maven project窗口,選中項目右鍵選中show dependencies(或show dependencies popup),會出來該module的全部依賴關(guān)系圖,如圖
然后ctrl+f搜索c3p0,出來兩個,如下圖
發(fā)現(xiàn)原來是quartz這個包下多了,右鍵選中它選擇Exclude掉,對應(yīng)的pom.xml就已經(jīng)成功修改了,如下圖
進入項目根目錄打開命令窗口,輸入maven命令:mvn clean package -Dskiptests(刪除,打包,編譯,測試,跳過test文件)來測試,如下圖
進入target目錄,打開war,進入lib,發(fā)現(xiàn)只有一個c3p0jar包了
如果還是有兩個,說明可能沒clean完全,就在pom.xml加入warSourceExcludes,忽略掉WEB-INF下面的文件
- warSourceExcludes是在拷貝文件到war文件夾時忽略掉指定文件或者文件夾(但是如果war命令前沒有clean指令,而war文件夾下已經(jīng)包含了指定文件或者文件夾時,最后生成的war包里還是會包含這些文件或文件夾,哪怕沒有拷貝它們到war文件夾).
- packagingExcludes是在生成war包時不包含指定文件或文件夾到war文件中,不論它們是否存在于war文件夾下。
如下圖:
總結(jié)
需要加強了解下maven了
更多精彩文章請關(guān)注
- 個人博客:EdwardDrew
- 簡書
- CSDN
總結(jié)
以上是生活随笔為你收集整理的java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CPSR 和 SPSR
- 下一篇: 美字