最近由于业务需要引入了shardingsphere框架org.apache.shardingsphereshardingsphere-jdbc-core5.0.0-引入beta后,发现没有打印SQL错误日志。例如执行MyBatis插入语句:intresult=mapper.batchInsert(entity)因为实体不满足存储要求,部分字段没有设置值,正常会打印异常:java.sql.SQLException:Field'from'没有默认值但是引入shardingsphere框架后,mapper.batchInsert(entity)正常返回-1,也没有任务异常日志,于是DEBUG找到SQL执行Location,定位到如下代码:...atorg.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement$2.executeSQL(ShardingSpherePreparedStatement.java:303)atorg.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback。execute(JDBCExecutorCallback.java:85)...if(saneResult.isPresent()){//if始终为真,因为saneResult必须具有值false或truereturnsaneResult.get();}//以下异常日志输出永远不能执行sqlExecutionHook.finishFailure(ex);SQLExecutorExceptionHandler.handleException(ex);returnnull;解决方案升级到5.0.0org.apache.shardingsphereshardingsphere-jdbc-core5.0.0ShardingSpherePreparedStatement类已修改:protectedOptionalgetSaneResult(SQLStatementsqlStatement){returnOptional.empty();//herereturnsaneResult.isPresent()isalwaysfalse}附上升级后打印的异常堆栈(版本5.0.0):java.sql.SQLException:Field'from'doesn'thaveadefaultvalueatcom.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)在com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)在com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping。com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)在com.mysql.cj.jdbc.ClientPreparedS处的translateException(SQLExceptionsMapping.java:122)tatement.execute(ClientPreparedStatement.java:370)在com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)在org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement$2.executeSQL(ShardingSpherePreparedStatement.java:307)在org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement$2.executeSQL(ShardingSpherePreparedStatement.java:303)在org.apache.shardingsphere.infra.executor.sql.execute.engine.driver。jdbc.JDBCExecutorCallback.execute(JDBCExecutorCallback.java:85)在org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback.execute(JDBCExecutorCallback.java:64)在org.apache.shardingsphere。infra.executor.kernel.ExecutorEngine.syncExecute(ExecutorEngine.java:101)在org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine.parallelExecute(ExecutorEngine.java:97)在org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine.execute(ExecutorEngine.java:82)在org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor.execute(JDBCExecutor.java:65)在org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor.execute(JDBCExecutor.java:49)在org.apache.shardingsphere.driver.executor.JDBCLockEngine.doExecute(JDBCLockEngine.java:114))在org.apache.shardingsphere.driver.executor.JDBCLockEngine.execute(JDBCLockEngine.java:91)在org.apache.shardingsphere.driver.executor.DriverJDBCExecutor.execute(DriverJDBCExecutor.java:122)在org.apache.shardingsphere。driver.jdbc.core.statement.ShardingSpherePreparedStatement.execute(ShardingSpherePreparedStatement.java:283)在org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)在org.apache.ibatis.executor.statement。RoutingStatementHandler.update(RoutingStatementHandler.java:74)在org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)在org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)在org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)在org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)在org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)在sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java。lang.reflect.Method.invoke(Method.java:498)在org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)在com.sun.proxy.$Proxy106.insert(UnknownSource)在org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:271)在org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)在org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152)在org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)在com.sun.proxy.$Proxy216.batchInsert(UnknownSource)在com.facebook.common.service.BaseService.batchInsert(BaseService.java:159)在com.facebook.common.service.BaseService$$FastClassBySpringCGLIB$$13311683.invoke(<生成>)在org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)在org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)在org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy9.java:74))在org.springframework.transaction.interceptor。TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367)在org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)在org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)在org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)在com.hw.spy.task.services.AdsLibKeywordTaskAdsService$$EnhancerBySpringCGLIB$$23d1258a.batchInsert(<生成>)在com.hw.spy.task.services.AdsLibKeywordTaskAdsSaveService.createTaskByLevels(AdsLibKeywordTaskAdsSaveService.java:114)在com.hw.spy.spy.taskAdsk.services$createTask$0(AdsLibKeywordTaskAdsSaveService.java:62)在com.facebook.common.utils.log.MDCHelper.tagCallback(MDCHelper.java:114)在com.facebook.common.utils.log.MDCHelper.callback(MDCHelper.java:97)在com.hw.spy.task.services.AdsLibKeywordTaskAdsSaveService.createTask(AdsLibKeywordTaskAdsSaveService.java:45)在com.hw.spy.task.services.AdsLibKeywordTaskAdsService.loadTask(AdsLibKeywordTaskAdsService.java:96)在com.hw.spy.common.service.queue.RedisQueueComponent.lambda$loadDataToQueue$0(RedisQueueComponent.java:77)在com.hw。spy.common.service.queue.OnceExecutionService.run(OnceExecutionService.java:150)在java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)在java.util.concurrent.FutureTask.run$$$在java.util.concurrent.FutureTask.run(FutureTask.java)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)在com.facebook.common.utils.NamedThreadFactory.lambda$newThread$0(NamedThreadFactory.java:31)在java.lang.Thread.run(Thread.java:748)