今天在操作过程中遇到了这样一个问题:
org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:695)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
at org.springframework.transaction.interceptor.TransactionInter.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)ceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at com.newspace.atetgame.activeDevice.bo.impl.ActiveDeviceBoImpl$$EnhancerByCGLIB$$39953cee.saveActiveDevice(<generated>)
at com.newspace.atetgame.web.activeDevice.ActiveDeviceServlet.doPost(ActiveDeviceServlet.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve
这个是我在做一个接口操作的时候出现的,情景如下:
1、在接口中我首先做了一个insert,插入数据库操作,然后写了一个try ... catch ...
2、当时是已经在第1点里面,抛了异常了,然后e.printStackTrace();将异常打印出来;然后从bo方法里面跳转回来时候,结果捕捉异常时候就将这个问题打印出来
解决方法:
1、你肯定在Action或者servlet类中已经抛了异常并捕获了异常,如下格式:
try {
// do something
} catch(Exception e) {
e.printStackTrace();
logger.error("XXXX.do: 操作失败", e);
}
2、
在do something 里面如果进行了insert或者save等操作,如果在一个bo里面进行的,那么那个bo类里面不需要再写try...catch...
亦或是
在bo类中加上try ... catch ... 也把异常进行捕获,然后终止其操作就对了。
(我采用了在bo类中不加try ... catch ... 操作)
问题解决。
更多精彩敬请关注公众号
Java极客思维
微信扫一扫,关注公众号