工作中遇到的错误记录

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

 

 

posted @ 2016-12-21 14:30  AfterWinter  阅读(418)  评论(0编辑  收藏  举报