mybatis插入与主键重复的元素时,会一直停留在被调用的方法上,不报错,也不不往下执行,一直卡在方法上,这是为什么
线程信息如下:
名称: http-nio-8080-exec-7
状态: java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@726283b2上的WAITING
总阻止数: 0, 总等待数: 2
堆栈跟踪:
java.base@16.0.1/jdk.internal.misc.Unsafe.park(Native Method)
java.base@16.0.1/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341)
java.base@16.0.1/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:505)
java.base@16.0.1/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3137)
java.base@16.0.1/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1614)
java.base@16.0.1/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:146)
org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base@16.0.1/java.lang.Thread.run(Thread.java:831)
通过try catch,我捕捉到了DuplicateKeyException异常,但是在catch语句块中只能以System.out.println(异常对象)的形式得到错误信息,而不能通过throw 异常对象抛出错误信息。
try{
goodsMapper.addGoods(goods.get(0));
}catch(DuplicateKeyException e){
System.out.println(e);//可以正常打印错误信息
System.out.println("throw e:");//可以正常执行
throw e;//无法抛出异常,在执行这条语句时一直处于停滞状态
}
try catch看看有没有报错
啊这.主键冲突会直接报错的啊.你DEBUG看下
加上这个,再运行看看控制台有没有异常信息
try {
//调用插入的方法
} catch (Exception e) {
e.printStackTrace();
}