解決:(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
代碼還原:
(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