Occasional errors do not always occur
mybatis version: 3.5.13 mybatis-spring: 2.1.1 mysql-connector-j: 8.1.0 atomikos-util: 4.0.6
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.NullPointerException
### The error may exist in class path resource [mapper/clst/ExaminationMapper.xml]
### The error may involve com.iflytek.clst.dao.clst.ExaminationDao.statisticModuleAvgScore
### The error occurred while executing a query
### Cause: java.lang.NullPointerException ---> org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.NullPointerException
### The error may exist in class path resource [mapper/clst/ExaminationMapper.xml]
### The error may involve com.iflytek.clst.dao.clst.ExaminationDao.statisticModuleAvgScore
### The error occurred while executing a query
### Cause: java.lang.NullPointerException ---> java.lang.NullPointerException: 引发类型为“java.lang.NullPointerException”的异常。
--- 内部异常堆栈跟踪的结尾 ---
在 org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
在 org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:156)
在 org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
在 org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)
在 org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75)
在 sun.reflect.GeneratedMethodAccessor82.invoke(Unknown Source)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:498)
在 org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)
在 com.sun.proxy.$Proxy112.selectOne(Unknown Source)
在 org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160)
在 com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89)
在 com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
在 com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
在 com.sun.proxy.$Proxy134.statisticModuleAvgScore(Unknown Source)
在 com.iflytek.clst.service.ExaminationService.statisticModuleAvgScore(ExaminationService.java:37)
在 com.iflytek.clst.controller.student.ExaminationController.statisticModuleAvgScore(ExaminationController.java:24)
在 com.iflytek.clst.controller.student.ExaminationController$$FastClassBySpringCGLIB$$74db6f41.invoke(<generated>)
在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
在 org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58)
在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
在 org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
在 com.rrslj.alpha.spring.aspect.ControllerAspect.around(ControllerAspect.java:46)
在 sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:498)
在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)
在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)
在 org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)
在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
在 org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
在 com.iflytek.clst.controller.student.ExaminationController$$EnhancerBySpringCGLIB$$5d6ab72e.statisticModuleAvgScore(<generated>)
在 sun.reflect.GeneratedMethodAccessor128.invoke(Unknown Source)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:498)
在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 com.github.xiaoymin.knife4j.spring.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:62)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 com.github.xiaoymin.knife4j.spring.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:98)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:114)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 com.rrslj.alpha.spring.servlet.DispatcherFilter.doFilter(DispatcherFilter.java:51)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1790)
在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
在 org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
在 org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
在 java.lang.Thread.run(Thread.java:748)
--- 内部异常堆栈跟踪的结尾 ---
在 org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:97)
在 org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)
在 com.sun.proxy.$Proxy112.selectOne(Unknown Source)
在 org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160)
在 com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89)
在 com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
在 com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
在 com.sun.proxy.$Proxy134.statisticModuleAvgScore(Unknown Source)
在 com.iflytek.clst.service.ExaminationService.statisticModuleAvgScore(ExaminationService.java:37)
在 com.iflytek.clst.controller.student.ExaminationController.statisticModuleAvgScore(ExaminationController.java:24)
在 com.iflytek.clst.controller.student.ExaminationController$$FastClassBySpringCGLIB$$74db6f41.invoke(<generated>)
在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
在 org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58)
在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
在 org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
在 com.rrslj.alpha.spring.aspect.ControllerAspect.around(ControllerAspect.java:46)
在 sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:498)
在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)
在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)
在 org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)
在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
在 org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
在 com.iflytek.clst.controller.student.ExaminationController$$EnhancerBySpringCGLIB$$5d6ab72e.statisticModuleAvgScore(<generated>)
在 sun.reflect.GeneratedMethodAccessor128.invoke(Unknown Source)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:498)
在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 com.github.xiaoymin.knife4j.spring.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:62)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 com.github.xiaoymin.knife4j.spring.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:98)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:114)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 com.rrslj.alpha.spring.servlet.DispatcherFilter.doFilter(DispatcherFilter.java:51)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1790)
在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
在 org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
在 org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
在 java.lang.Thread.run(Thread.java:748)
Comment From: harawata
Hello @timandy ,
The stack trace looks incomplete. Please post the entire stack trace without modifying it.
Or, provide a repro project that reproduces the NullPointerException. And when you create the project, please make it as simple as possible (i.e. no atomikos, no mybatis-plus). If it's a MyBatis (or mybatis-spring) bug, it must be reproduced without third party products. There are some project templates and examples in this repo: https://github.com/harawata/mybatis-issues
Comment From: timandy
Hi @harawata Thans for your reply.
The stack content has not been modified, it has only been translated. The probability of this problem occurring is very low, so even if I write a sample, I am not sure if it can be replicated. Next, I will try to write an example.
# The util for translate stacktrace
public final class ThrowableUtils {
/**
* 获取异常详细信息
*
* @param throwable
* @return
*/
public static String getString(Throwable throwable) {
if (throwable == null)
return StringUtils.EMPTY;
StringBuilder builder = new StringBuilder();
String clazzName = throwable.getClass().getName();
builder.append(clazzName).append(": ");
String message = throwable.getLocalizedMessage();
if (StringUtils.isEmpty(message))
builder.append("引发类型为“").append(clazzName).append("”的异常。");
else
builder.append(message);
Throwable innerThrowable = throwable.getCause();
if (innerThrowable != null)
builder.append(" ---> ").append(getString(innerThrowable)).append(Environment.NewLine).append(" --- 内部异常堆栈跟踪的结尾 ---");
StackTraceElement[] traces = throwable.getStackTrace();
if (traces != null)
for (StackTraceElement trace : traces)
builder.append(Environment.NewLine).append(" 在 ").append(trace);
return builder.toString();
}
/**
* 获取异常简略信息
*
* @param throwable
* @return
*/
public static String getMessage(Throwable throwable) {
if (throwable == null)
return StringUtils.EMPTY;
String message = throwable.getLocalizedMessage();
return StringUtils.isEmpty(message) ? "引发类型为“" + throwable.getClass().getName() + "”的异常。" : message;
}
}
Comment From: harawata
@timandy ,
That class basically removes the root causes deeper than the first level, I think. Please do not use that class.
Comment From: timandy
@harawata The ThrowableUtils print casuse first, not remove root causes.
Comment From: harawata
@timandy ,
Umm.... could you just exclude the class anyway? We need to see the original stack trace as is.
In that class, innerThrowable
may wrap another Throwable
, which may wrap another Throwable
, and so on...
You really should not try to modify (or "translate") stack trace.
Comment From: codeSoupSz
!
Comment From: timandy
The bug was in atomikos, see https://github.com/atomikos/transactions-essentials/issues/36#issuecomment-2078984805
Comment From: harawata
Thank you for the update, @timandy ! As the linked issue is closed, the problem has been resolved in the latest version of atomikos at least, I guess?
Comment From: timandy
Hi @harawata, I am not sure this bug is fiexed or not in the latest version of atomikos. I reviewed the latest version of Class ConnectionPoolWithConcurrentValidation, may be the bug is still there. We use SpringBoot 2.7.15, mybatis-plus 3.5.3.2, mybatis-spring 2.1.1, mybatis 3.5.13, atomikos 4.0.6 and alibaba's connectionPool druid 1.2.16.
Comment From: harawata
@timandy ,
I see. Thanks for the info!