工作中遇到的错误记录
1 项目中程序调用发信息的接口时候,直接调用可能出现错误,影响主程序的流程;
解决:(1)mq发送消息
(2)发消息的接口自身捕获处理异常,不能抛出到主程序中
现在针对第二种解决方案进行实现:因为以前各个发消息的节点都是抛出异常,如果针对每个方法都加上异常处理会很麻烦,现在用spring提供的@Aspect实现;
使用的时候注意如下:
<1> <context:component-scan /> 默认不会扫描@Aspect这个注解,需要在类上面添加@Comment注解或xml里面配置include
<2> @AfterThrowing 捕捉异常后,还会继续往上抛出
@Around try catch捕捉异常后,不会继续往上抛出
<3> 参考:http://blog.csdn.net/confirmaname/article/details/9728327
2 调用方法时出现 Transaction rolled back because it has been marked as rollback-only 异常
代码还原:
(1)
class xx{
method a(){
b();
}
}
(2) 配置
a方法属于:<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="Exception" />
b方法属于:<tx:method name="*" read-only="true" />
出现原因:a方法调用b方法的时候,b方法出现异常,但是自己捕捉到,没有抛出。此时b方法 事务因为配置中是默认的(REQUIRED),所以和a方法用一个事务,这时b方法出现异常会把事务进行标记,然后a方法继续进行,结束方法之前提交事务,就会出现这个异常。
解决方法:因为b方法是查询方法,所以配置b方法为NOT_SUPPORTED
参考连接:http://blog.csdn.net/launch_225/article/details/7814346
http://blog.sina.com.cn/s/blog_4a40057401000865.html